Vue父子模版传值及组件传值的三种方法

yizhihongxing

下面是“Vue父子模版传值及组件传值的三种方法”的完整攻略:

1. 父子模板传值

1.1 props

Vue中通过使用props来实现父子组件之间传递数据的功能。在父组件中,通过定义属性的方式将需要传递的数据绑定在子组件上;在子组件中,通过props选项来声明需要绑定哪些属性,最终父组件的数据会通过props传递给子组件。

下面是一个使用props传递数据的示例:

<template>
  <div>
    <h3>{{ title }}</h3>
    <ChildComponent :msg="message" />
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue'

export default {
  components: {
    ChildComponent
  },
  data () {
    return {
      title: '父子组件传值示例',
      message: '这是从父组件传递的数据'
    }
  }
}
</script>

在父组件中,我们定义了一个data属性message,存储了需要传递给子组件的数据。然后通过在子组件上绑定msg属性,将message属性的值传递给子组件。

在子组件中,可以通过props选项来声明需要绑定哪些属性,这里我们声明了一个名为msg的属性。

<template>
  <div>{{ msg }}</div>
</template>

<script>
export default {
  props: {
    msg: String
  }
}
</script>

在子组件中,我们使用{{msg}}语法来显示从父组件中传递过来的数据。

1.2 $emit

除了使用props来实现父子组件之间传递数据的功能,Vue还提供了方法$emit来实现父组件向子组件通信的功能。在父组件中,通过$emit方法来触发子组件中定义的自定义事件;在子组件中,通过定义自定义事件来接收父组件触发的事件。

下面是一个使用$emit传递数据的示例:

<template>
  <div>
    <h3>{{ title }}</h3>
    <ChildComponent @sendMsg="receiveMsg" />
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue'

export default {
  components: {
    ChildComponent
  },
  data () {
    return {
      title: '父子组件传值示例',
      message: ''
    }
  },
  methods: {
    receiveMsg (msg) {
      this.message = msg
    }
  }
}
</script>

在父组件中,我们定义了一个data属性message,用来存储从子组件中接收到的数据。然后在子组件中使用@sendMsg监听子组件自定义事件sendMsg,在触发sendMsg事件的时候传递数据。

<template>
  <div>
    <button @click="send">发送消息</button>
  </div>
</template>

<script>
export default {
  methods: {
    send () {
      this.$emit('sendMsg', '这是从子组件传递的数据')
    }
  }
}
</script>

在子组件中,我们定义了一个按钮,并在按钮的点击事件中触发了自定义事件sendMsg,并传递了数据。

2. 组件传值

2.1 Provide & Inject

Vue中使用Provide & Inject来实现跨级组件之间传递数据的功能。在父组件中,通过定义provide选项来声明需要提供给子组件的数据;在子组件中,通过定义inject选项来声明需要注入哪些数据。

下面是一个使用Provide & Inject传递数据的示例:

<template>
  <div>
    <h3>{{ title }}</h3>
    <ChildOne />
  </div>
</template>

<script>
import ChildOne from './ChildOne.vue'
export default {
  components: {
    ChildOne
  },
  provide () {
    return {
      message: '这是从父组件提供的数据'
    }
  },
  data () {
    return {
      title: 'Vue组件传值示例'
    }
  }
}
</script>

在父组件中,我们通过定义provide选项来提供数据给子组件。这里我们创建了一个名为message的provide属性,将需要传递的数据存储到message属性中。

<template>
  <div>{{ msg }}</div>
</template>

<script>
export default {
  inject: ['message'],
  computed: {
    msg () {
      return this.message
    }
  }
}
</script>

在子组件中,我们通过定义inject选项来声明需要注入哪些数据。这里我们声明了需要注入message属性,然后通过计算属性实现将message属性的值绑定到子组件的data属性中。

2.2 EventBus

Vue中可以通过EventBus来实现任意组件之间的传值。EventBus包含两个API:$on用于监听事件,$emit用于触发事件。

下面是一个使用EventBus传递数据的示例:

我们在一个新建的bus.js文件中定义了EventBus实例:

import Vue from 'vue'

export default new Vue()

在父组件中,我们引用了定义好的EventBus实例:

<template>
  <div>
    <h3>{{ title }}</h3>
    <ChildOne />
  </div>
</template>

<script>
import ChildOne from './ChildOne.vue'
import bus from './bus'

export default {
  components: {
    ChildOne
  },
  data () {
    return {
      title: 'Vue组件传值示例'
    }
  },
  mounted () {
    bus.$on('message', (data) => {
      console.log(data)
    })
  }
}
</script>

在父组件中,我们通过引入定义好的bus.js文件,并在mounted函数中通过bus.$on监听了名为message的事件,打印传递过来的数据。

<template>
  <div>
    <button @click="send">发送消息</button>
  </div>
</template>

<script>
import bus from './bus'

export default {
  methods: {
    send () {
      bus.$emit('message', '这是从子组件传递过来的数据')
    }
  }
}
</script>

在子组件中,我们发送了一个名为message的事件,并传递了数据。

通过以上三种方法,我们可以轻松实现组件之间、父子组件之间的数据传递;同时也保证了组件的通用性,不同组件之间相互独立,非常适合Vue的组件化思想。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue父子模版传值及组件传值的三种方法 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue常用事件v-on:click详解事件对象,事件冒泡,事件默认行为

    Vue.js是一种基于组件的JavaScript框架,使用它可以快速地构建Web应用程序,并且在处理用户交互时会涉及到许多事件。在Vue.js中,使用 v-on:click 事件指令来监听用户单击按钮和其他DOM元素的事件。在本攻略中,我们将讨论 v-on:click 事件的事件对象,事件冒泡以及事件默认行为。 事件对象 当使用v-on:click事件指令时…

    Vue 2023年5月28日
    00
  • vue 数组和对象不能直接赋值情况和解决方法(推荐)

    下面就来详细讲解一下“Vue 数组和对象不能直接赋值情况和解决方法”的完整攻略。 问题描述 在 Vue 中,我们经常需要对数据进行赋值操作。但是在进行数组或对象的赋值时,我们有时会遇到无法直接赋值的情况。例如: // 定义一个对象并初始化 let obj = { name: ‘John’, age: 25 } // 将一个新的对象赋值给 obj obj = …

    Vue 2023年5月28日
    00
  • 简单设置el-date-picker的默认当前时间问题

    下面是详细讲解如何设置 el-date-picker 的默认当前时间的攻略: 1.需求分析 当我们使用 el-date-picker 来选择日期时,默认展示的日期为当前日期,这在大部分场景下都是符合要求的。但有时候我们需要默认选中其他日期,比如一个从某一具体日期开始的查询页面。 在这种情况下,我们就需要设置 el-date-picker 的默认当前时间,让它…

    Vue 2023年5月29日
    00
  • Vite和Vue CLI的优劣

    下面是关于“Vite和Vue CLI的优劣”的详细讲解。 Vite和Vue CLI的定义 Vite和Vue CLI都是Vue.js的工具,用于快速构建现代化的Web应用程序。Vite是一种基于ESM的Web开发工具,而Vue CLI则是一个标准化的工具,具有插件和预设。 Vite和Vue CLI的优劣 Vite的优点 快速的开发环境搭建速度:Vite基于ES…

    Vue 2023年5月27日
    00
  • 构建Vue3桌面应用程序的方法

    构建Vue3桌面应用程序的方法可以分为以下几个步骤: 1. 安装 Vue CLI Vue CLI 是一个官方提供的脚手架工具,可以帮助我们快速创建 Vue.js 项目。可以通过以下命令进行安装: npm install -g @vue/cli # OR yarn global add @vue/cli 2. 创建 Vue 项目 在命令行中执行以下命令来创建一…

    Vue 2023年5月27日
    00
  • vue2.0 datepicker使用方法

    Vue2.0 Datepicker使用方法 简介 Vue2.0 Datepicker是一个基于Vue2.0和moment.js的日期选择器组件,它可以帮助你方便地选择日期并将所选日期返回给你的应用程序。 安装 安装Vue2.0 Datepicker很简单,只需要使用npm命令即可: npm install vue2-datepicker –save 使用 …

    Vue 2023年5月29日
    00
  • vue-以文件流-blob-的形式-下载-导出文件操作

    下面是详细的讲解“vue以文件流blob的形式下载导出文件操作”的完整攻略,包括原理、实现步骤以及示例说明。 一、原理 在前端中,可以通过blob对象来导出文件,同时,也可以通过axios库将数据流转化为blob对象,再进行导出,这个流程涉及到以下几个步骤: 用户发起下载文件的请求 前端向服务器发送请求,获取要导出的文件数据 前端将数据流转化为blob对象 …

    Vue 2023年5月27日
    00
  • Vue.js对象转换实例

    Vue.js对象转换实例的攻略如下: 1. 什么是Vue.js对象转换实例? 在Vue.js中,我们可以将JavaScript对象转换成Vue实例,即将一个普通的JavaScript对象传递给Vue构造器,创建一个Vue实例,从而可以在模板中使用。 2. Vue.js对象转换实例的使用方法 Step 1. 引入Vue.js <script src=&q…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部