vue数据传递--我有特殊的实现技巧
前言最近碰到了比较多的关于vue的eventBus的问题,之前定技术选型的时候也被问到了,vuex和eventBus的使用范围。所以简单的写一下。同时有一种特殊的实现方案。 有这么几种数据传递方式,vuex、props、eventBus和特殊的eventBus。 vuex不介绍,数据量和复杂度达不到不用它你才会向下看。 propsdemo父子组件传值,官方api,只写个demo。 1.父组件2.子组件父向子传值-->props 子向父传值-->子组件绑定事件回调定义在父组件,子组件触发此事件。 因不推荐子组件内直接修改父组件传入的props,需使用自定义事件。 限制父子组件。 eventBusdemo bus皆为导入的bus实例 {})
// 数据发出组件
// 当前组件发出值则
bus.$emit('event1',val)
可以看出本质是一个vue实例充当事件绑定的媒介。 在所有实例中使用其进行数据的通信。 双(多)方使用同名事件进行沟通。 问题
所以是否有一种更适用的方案呢? 特殊的eventBus?demo我们先来看个代码,线上代码。 bus皆为导入的bus实例。 {
this.val1 = val
})
}
})
// 数据发出组件
import bus from 'xx/bus'
// 触发在bus中已经绑定好的事件
bus.$emit('update1','123')
// 数据接收组件
{{val1}} 不同
解决的问题通信组件需同时存在?数据在bus上存储,所以没有要求。 多次绑定?绑定监听都在bus上,不会重复绑定。 数据只在$emit后可用?使用计算属性直接读取存在bus上的值,不需要再次触发事件。 探讨为什么使用计算属性 其实应该是为什么不能直接添加到data上,如 data1: bus.data1?我们可以再看一段代码,线上代码。 将bus修改为 {
console.log('触发1',i1++)
this.val.result = val
})
}
数据接收组件改为 可以看到,data中获取直接修改值值的数据是无法动态响应的。 为什么要用事件其实不用 简化版的vuex其实这种eventBus就是简化版的vuex。 vue文档中有这样一段话: 组件不允许直接修改属于 store 实例的 state,而应执行 action 来分发 (dispatch) 事件通知 store 去改变,我们最终达成了 Flux 架构。这样约定的好处是,我们能够记录所有 store 中发生的 state 改变。 store对应 bus实例, state对应 data, action对应 事件, dispatch对应 $emit。 同时vuex中组件获取数据的方式正是通过计算属性,那么其实vuex和Flux架构的理解和使用也没有那么难不是吗。 总结以上所述是小编给大家介绍的vue数据传递--我有特殊的实现技巧。编程之家 52php.cn 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |