vue 的组件通信(父子之间、非父子之间)
1、props/$emits
(1)v-model(input 的修饰符.lazy, .number, .trim),.sync(父组件:title.sync=”myTitle”, 子组件要 this.$emit(‘update:title’, this.title + ‘:: after update’))语法糖,在表单控件或者组件上创立“双向绑定”。
- text 和 textarea 元素应用 value property 和 input 事件;
- checkbox 和 radio 应用 checked property 和 change 事件;
- select 字段将 value 作为 prop 并将 change 作为事件。
(2)通过 props 向下传递,通过事件 $emit 向上传递
(3)不应该在一个子组件外部扭转 prop,这样会毁坏单向的数据绑定,导致数据流难以了解。如果有这样的须要,能够通过 data 属性接管或应用 computed 属性进行转换。
第二,如果 props 传递的是援用类型(对象或者数组),在子组件中扭转这个对象或数组,父组件的状态会也会做相应的更新,利用这一点就可能实现父子组件数据的“双向绑定”,尽管这样实现可能节俭代码,但会就义数据流向的简洁性,令人难以了解,最好不要这样去做。想要实现父子组件的数据“双向绑定”,能够应用 v-model 或 .sync。
2、$children/$parent
$parent 属性能够用来从一个子组件拜访父组件的实例,$children 属性 能够获取以后实例的间接子组件。
3、ref
(1)当父组件中须要被动获取子组件中的数据或者办法时,能够应用 $ref 来间接拜访这个子组件的实例。
(2)$refs 是作为渲染后果被创立的,所以在初始渲染的时候它还不存在,此时无奈无法访问。
(3)$refs 不是响应式的,只能拿到获取它的那一刻子组件实例的状态,所以要防止在模板和计算属性中应用它。
4、provide/inject 依赖注入
能够让咱们在任意后辈组件中拜访父组件提供的数据和办法。
5、eventBus
能够实现任意两个组件间的通信
6、vuex
它采纳集中式存储管理利用的所有组件的状态,并以相应的规定保障状态以一种“可预测”的形式发生变化,更容易定位问题
7、$attrs/$listeners
(1)当要和一个嵌套很深的组件进行通信时,如果应用 prop 和 events 就会显的非常繁琐,两头的组件只起到了一个中转站的作用
(2)$attrs 会蕴含父组件中没有被 prop 接管的所有属性(不蕴含 class 和 style 属性),能够通过 v-bind=”$attrs” 间接将这些属性传入外部组件。
(3)$listeners 会蕴含所有父组件中的 v-on 事件监听器 (不蕴含 .native 润饰器的),能够通过 v-on=”$listeners” 传入外部组件。
8、localStorage/sessionStotage
9、通过 $root 拜访根实例
(1)通过 $root,任何组件都能够获取以后组件树的根 Vue 实例,通过保护根实例上的 data,就能够实现组件间的数据共享。
(2)批改数据不可预测