组件通信的几种方式

it2025-09-02  16

vue中有多种组件,父组件、子组件、兄弟组件等,这些组件之间的传值方式也是不同得

父传子 这种传值方式比较简单,子组件只需用props将父组件传递过来的数据接收,即可使用

父组件代码:

<p>这是父组件</p> <input type="text" v-model="parentData"> <Childrenfrt :parentData="parentData" ></Childrenfrt>

子组件代码:

props: { parentData: { type: String, required: true } }

此时子组件中已经收到了父组件传来的数据

子传父 子组件传值给父组件需要通过一个自定义得方法,父组件监控这个方法来获得子组件传过来的值。子组件通过this.$emit将数据放在setData方法中,父组件通过监控setData这个方法将值取出。

子组件代码:

<p><input type="text" v-model="children1Data"></p> <p><button @click="sentChildData">点击传值给父组件</button></p> export default { name: 'Childrenfrt', data() { return{ children1Data: '' } }, methods: { sentChildData() { this.$emit('sentData', this.children1Data) } } } </script>

父组件代码:

<Childrenfrt @sentData="sentData"></Childrenfrt> <script> export default { name: 'Index', data() { return{ childData: '' } }, methods: { sentData(val) { this.childData = val } } } </script>

3.兄弟组件之间 兄弟组件指的是平级之间的组件,他们中得传值方式比较多 1.第一种是属于一种比较麻烦的方法,可以将值先传给父组件,再通过父组件传值给子组件得传值方式传值给另一个子组件 2.可以使用Bus事件总线,创建一个中转站来进行传值。

创建一个bus文件夹,在文件夹中新建index.js文件

import Vue from 'vue' const Bus = new Vue() export default Bus

在main.js中引用

import Bus from './bus/Bus' Vue.prototype.$bus = Bus // 在vue原型上添加$bus属性

在方法中使用:通过 this.$ bus.$emit将值放入setDataToBrather中

this.$bus.$emit('setDataToBrather', this.children1Data) // 第一个参数是自己创建的方法名,第二个参数是要传递得数据

取值得方法:通过$on将值取出,第一个参数还是之前传递的方法名,第二个参数是一个函数,函数中得参数就是传递得值,最后别忘了在beforeDestroy钩子函数中将这个线程关闭

created() { this.$bus.$on('setDataToBrather', (val) => { this.ChildrenSecData = val }) }, beforeDestroy() { this.$bus.$off('setDataToBrather') }
最新回复(0)