vue 兄弟组件的信息传递的方法实例详解
程序员文章站
2022-04-09 16:26:20
前言
兄弟组件的信息传递有三种方式:
1.vuex 传递。
会将信息公有化。
此方法可在所有组件间传递数据。
2.建立vue 实例模块传递数据。
vue 实...
前言
兄弟组件的信息传递有三种方式:
1.vuex 传递。
会将信息公有化。
此方法可在所有组件间传递数据。
2.建立vue 实例模块传递数据。
vue 实例模块会成为共用的事件触发器。
其通过事件传递的信息不回被公有化。
3.建立事件链传递数据。
一个兄弟组件通过事件将信息传给兄弟组件共有的父组件。
父组件再将信息通过属性传递给另一个兄弟组件。
若兄弟组件不是亲兄弟,而是堂兄弟,也就是他们有一个共同的爷爷,那么此方法会使程序变得繁琐。
一,vuex 传递数据
1.安装vuex
npm install vuex --save
2.store.js
import vue from 'vue' import vuex from 'vuex' vue.use(vuex) export const store=new vuex.store({ state:{ msgfroma:'a 还没说话', msgfromb:'b 还没说话' }, getters:{ }, mutations:{ msgachange(state,msg){ state.msgfroma=msg; }, msgbchange(state,msg){ state.msgfromb=msg; }, } })
3.子组件a.vue
<template> <div class="a"> <h3>a 模块</h3> <p>b 说:{{msgfromb}}</p> <button @click="asay">a 把自己的信息传给b</button> </div> </template> <script> export default { data () { return { msg:'我是a', } }, methods:{ asay(){ this.$store.commit('msgachange', this.msg); } }, computed: { msgfromb() { return this.$store.state.msgfromb; } } } </script>
4.子组件b.vue
<template> <div class="b"> <h3>b 模块</h3> <p>a 说:{{msgfroma}}</p> <button @click="bsay">b 把自己的信息传给a</button> </div> </template> <script> export default { data () { return { msg:'我是b' } }, methods:{ bsay(){ this.$store.commit('msgbchange', this.msg); } }, computed: { msgfroma() { return this.$store.state.msgfroma; } } } </script>
二,vue 实例模块传递数据
1.建立vue 实例模块 bus.js
import vue from 'vue' export default new vue();
2.子组件 a.vue
<template> <div class="a"> <h3>a 模块</h3> <p>b 说:{{msgfromb}}</p> <button @click="asay">a 把自己的信息传给b</button> </div> </template> <script> import bus from '../util/bus' export default { data () { return { msg:'我是a', msgfromb:'b 还没说话', } }, created(){ let _this=this; bus.$on('msgbchange',function(dt){ _this.msgfromb=dt; }) }, methods:{ asay(){ bus.$emit('msgachange',this.msg); } } } </script>
3.子组件 b.vue
<template> <div class="b"> <h3>b 模块</h3> <p>a 说:{{msgfroma}}</p> <button @click="bsay">b 把自己的信息传给a</button> </div> </template> <script> import bus from '../util/bus' export default { data () { return { msg:'我是b', msgfroma:'a 还没说话' } }, created(){ let _this=this; bus.$on('msgachange',function(dt){ _this.msgfroma=dt; }) }, methods:{ bsay(){ bus.$emit('msgbchange',this.msg); } } } </script>
三,事件链传递数据
1.父组件 c.vue
<template> <div class="c"> <h3>事件链传递数据</h3> <appa :msg-from-b="msgfromb" v-on:msg-a-change="asay"></appa> <appb :msg-from-a="msgfroma" v-on:msg-b-change="bsay"></appb> </div> </template> <script> import a from '../a3/a' import b from '../b3/b' export default { data () { return { msgfroma:'a 还没说话', msgfromb:'b 还没说话' } }, methods:{ asay(msg){ this.msgfroma=msg; }, bsay(msg){ this.msgfromb=msg; }, }, components:{ appa:a, appb:b, } } </script>
2.子组件 a.vue
<template> <div class="a"> <h3>a 模块</h3> <p>b 说:{{msgfromb}}</p> <button @click="asay">a 把自己的信息传给b</button> </div> </template> <script> export default { data () { return { msg:'我是a', } }, methods:{ asay(){ this.$emit('msg-a-change', this.msg) } }, props: ['msgfromb'], } </script>
3.子组件 b.vue
<template> <div class="b"> <h3>b 模块</h3> <p>a 说:{{msgfroma}}</p> <button @click="bsay">b 把自己的信息传给a</button> </div> </template> <script> import bus from '../util/bus' export default { data () { return { msg:'我是b', } }, methods:{ bsay(){ this.$emit('msg-b-change', this.msg) } }, props: ['msgfroma'], } </script>
总结
以上所述是小编给大家介绍的vue 兄弟组件的信息传递的方法,希望对大家有所帮助
上一篇: Vue项目实现换肤功能的一种方案分析
下一篇: 你应该知道的.NET错误与异常处理机制