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

下面是“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.js教程之计算属性

    让我来为你详细讲解一下“Vue.js教程之计算属性”的完整攻略。 什么是计算属性? 在 Vue.js 中,计算属性(Computed)是一种在模板中使用的属性,通过计算属性我们可以实现一些动态的内容展示或逻辑处理,并且相较于使用方法或侦听器等方式,计算属性的实现更为简便、高效。 我们可以在 Vue 实例中使用 computed 属性来定义计算属性,该属性是一…

    Vue 2023年5月27日
    00
  • vuex中Getter的用法详解

    Vuex中Getter的用法详解 Vuex是Vue.js中使用的状态管理模式。它建立在Vue.js的基础上,提供了中央数据存储库,使得组件之间共享状态变得非常容易。 getter是Vuex中获取状态的一种方法,它可以访问状态的属性并进行某些计算。本篇文章将详细讲解getter的用法。 Getter的定义 在Vuex中使用getter可以获取状态的值并进行计算…

    Vue 2023年5月28日
    00
  • 为什么vue中不建议使用空字符串作为className

    在Vue中使用类名时,应尽量避免空字符串作为类名,以下是原因及解决方案: 1. 空字符串无法清除类名 在Vue中使用 v-bind:class 绑定类名时,空字符串会被视为有效的类名。当我们通过更改 data 中的属性值来更改类名时,空字符串也会作为一个类名被添加。但是,一旦添加上了空字符串,就无法通过更改该属性值来清除这个空字符串类名。 示例代码: &lt…

    Vue 2023年5月27日
    00
  • JavaScript函数封装随机颜色验证码(完整代码)

    让我来详细讲解“JavaScript函数封装随机颜色验证码(完整代码)”的完整攻略。 题目描述 我们需要开发一个可以生成随机颜色的验证码的JavaScript函数,并将其封装成一个可复用的代码。 解决方案 我们可以通过以下步骤来实现该功能: 第一步:定义变量和函数 首先,我们需要定义一些变量和函数,如下所示: var code, codeLength = 6…

    Vue 2023年5月28日
    00
  • vue使用中的内存泄漏【推荐】

    Vue 使用中的内存泄漏【推荐】 什么是内存泄漏 内存泄漏指的是在程序运行中,分配的内存没有释放,这样就会造成内存占用过高的问题。在 Vue 中,内存泄漏指的是在使用过程中,一些会影响页面性能的事件监听器、订阅等占用内存的功能没有被释放,最终导致页面卡顿、甚至崩溃。 如何解决内存泄漏问题 取消事件监听 在 Vue 中,无论是使用 @click、@scroll…

    Vue 2023年5月28日
    00
  • Vue mockjs编写假数据并请求获取实现流程

    Vue MockJS是一款用于前端mock数据的工具。其可以模拟请求API返回假数据,用于前端开发时进行数据调试、测试。本文将详细介绍Vue MockJS编写假数据并请求获取的实现流程。 1. 安装Vue MockJS 在使用Vue MockJS之前,需要确保在项目中已经安装了Vue,接着可以通过npm或yarn来安装Vue MockJS。 # 使用npm进…

    Vue 2023年5月28日
    00
  • vue+element-ui前端使用print-js实现打印功能(可自定义样式)

    让我来为你详细讲解“vue+element-ui前端使用print-js实现打印功能(可自定义样式)”的完整攻略。 简介 在前端开发中,有时需要提供页面的打印功能。本篇攻略将介绍如何使用print-js插件实现可自定义样式的打印功能,使用的前端框架是Vue,UI组件库是Element-UI。 安装依赖 首先,我们需要安装print-js依赖: npm ins…

    Vue 2023年5月28日
    00
  • Vue3.0静态文件存放路径与引用方式

    下面是关于Vue3.0静态文件存放路径与引用方式的完整攻略: 静态文件存放路径 在Vue3.0中,静态文件被默认存放在public文件夹中,该文件夹位于项目根目录下。在public文件夹中,你可以自由创建文件夹存放静态资源,例如images、css、js等文件夹。 值得注意的是,public文件夹中的文件可以被直接引用,例如<img src=”/ima…

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