vue中组件间(非父子组件)通信的两种方法:eventbus与vuex的使用
父子组件的通信请查看这篇博文此文主要介绍兄弟组件间的通信所有组件通信方式请查看这篇博文第一种:eventbus创建bus.jsexport default(Vue) => {const eventBus = new Vue()Vue.prototype.$bus = {$on (...param) {eventBus.$on(...p...
·
父子组件的通信请查看这篇博文
此文主要介绍兄弟组件间的通信
所有组件通信方式请查看这篇博文
第一种:eventbus
创建bus.js
export default(Vue) => {
const eventBus = new Vue()
Vue.prototype.$bus = {
$on (...param) {
eventBus.$on(...param)
},
$off (...param) {
eventBus.$off(...param)
},
$once (...param) {
eventBus.$once(...param)
},
$emit (...param) {
eventBus.$emit(...param)
}
}
}
在main.js引入并调用
import Bus from './bus'
Bus(Vue)
在组件1中发送事件:
tocenter () {
this.$bus.$emit('接收的函数名functionName', '参数args')
}
在组件2中接收:
created () {
this.$bus.$on('functionName', (args) => {
// 要做的事
})
}
第二种方法:状态集中管理vuex
在store.js中,保存需要存储的数据及方法
state: {
storeCart: {id:'',num:''}
},
// 相当于计算属性
getters: {
},
// 相当于methods
mutations: {
modify (state, data) {
let { id, num } = data // 解构里面的id与num值
Vue.set(state.storeCart, id, num) // 动态修改state中的值
localStorage.setItem('cart', JSON.stringify(state.storeCart)) // 存入本地
}
}
vuex中state中的数据及getter中的方法可以直接在组件中通过属性调用
this.store.state.storeCart
this.store.getters.doneTodosstore
而mutation 这个选项更像是事件注册:“当触发一个类型为 increment 的 mutation 时,调用此函数。”要唤醒一个 mutation handler,你需要以相应的 type 调用 store.commit 方法:传入额外的参数,即 mutation 的 载荷(payload):
this.store.commit('modify', { id: 10 , num: 2})
有疑问欢迎留言或者加我qq互相交流学习
更多推荐
已为社区贡献15条内容
所有评论(0)