vue 组件与全局数据传递共享方式
一,父子组件间数据传递
实际工作中会遇到一些复用程度高的功能,自己会封装小组件全局调用,在组件中通过自定义props里的值,例如:

在需要调用的组件中先import 组件进来,自定义标签引入,在标签上传入props接受的参数:


二、父组件调用子组件属性与方法 - $ref 、$parent
this.$refs.hw.xx = 'xxx'
this.$children[0].xx = 'xxx'
三、通过 $attar 、$listener
$attrs
把父组件中非props属性绑定到内部组件
$listeners
把父组件中的DOM对象的原生事件绑定到内部组件
四、v-model
五、插槽
// ComA
<div>
<slot></slot>
<slot name="content"></slot>
</div>
// 使用
<com-a>
<template v-slot:default>具名插槽</template>
<template v-slot:content>自定义插槽</template>
</com-a>
六、project / inject:能够实现祖先给后代传值
// ancestor
provide() {
return { foo: 'foo'}
}
// descendant
inject: ['foo']
七、事件总线:创建一个Bus类负责事件派发、监听和回调管理
// Bus:事件派发、监听和回调管理
class Bus{
constructor(){
this.callbacks = {}
}
$on(name, fn){
this.callbacks[name] = this.callbacks[name] || []
this.callbacks[name].push(fn)
}
$emit(name, args){
if(this.callbacks[name]){
this.callbacks[name].forEach(cb => cb(args))
}
}
}
// main.js
Vue.prototype.$bus = new Bus()
// child1
this.$bus.$on('foo', handle)
// child2
this.$bus.$emit('foo')
七、文件可读可写
使用场景中经常出现,多个组件需要相同的接口返回数据进行处理,纯粹按请求很频繁会影响性能跟体验感,然后从上个方法在深入探索了下,
将这些数据放在全局“变量”里,可读可写:

在入口文件main.js里注入,即可在所有组件读写变量

似乎是可以了,但在这有问题全局变量初始值为空,刷新时,各模块同时加载,父级组件接口未执行完成取得数据写入文件,子组件程序就已经执行完成,所以是取不到数据的,
一开始想的是promise思路,终究就是个加载顺序问题,通过路由加载可处理。
八、vuex:创建唯一的全局数据管理者store,通过它管理数据并通知组件状态变更

浙公网安备 33010602011771号