反向传值
多层组件传值
p
a
r
e
n
t
/
parent/
parent/root、
c
h
i
l
d
r
e
n
/
children/
children/refs
-
这些功能都是有劣势或危险的场景,官方建议我们尽量避开它们 -
$root:访问根组件vm对象,所有的子组件都可以将这个实例作为一个全局 store来访问或使用,现在有更好的技术vuex来代替
- 在任何组件都可以直接利用this.$root来访问根组件
-
$parent:访问父组件对象,直接操作父组件的data数据,不需要再使用属性传值,但是容易出现渲染混乱之后只渲染一个的情况 -
$children:访问子组件对象数组,不能保证顺序,也不是响应式的 -
这里补充一下;前三者的关系可以理解为
r
o
o
t
为
祖
先
,
然
后
root为祖先,然后
root为祖先,然后parent与
c
h
i
l
d
r
e
n
是
父
亲
与
儿
子
的
关
系
,
且
children是父亲与儿子的关系,且
children是父亲与儿子的关系,且root的$parent为undefined
中央事件总线bus
-
通过创建一个新的vm对象,专门统一注册事件,供所有组件共同操作,达到所有组件随意隔代传值的效果 -
具体方法为新建一个js文件来引入 文件内写上如下代码即可 import Vue from "vue"
let bus=new Vue({
methods:{
on(eventname,cb){
this.$on(eventname,cb)
},
emit(eventname){
this.$emit(eventname,...arguments)
},
off(eventname){
this.$off(eventname)
}
}
})
export default bus;
Provide/Inject
|