VUE的组件通信、监听、计算属性

134 阅读1分钟

vue父子组件通讯

props与$emit

props 传入子组件数据 this.$emit子组件向父组件触发一个事件

props:父组件传递给子组件值

父:动态绑定属性

子:props:{} 接受传递的值,可以设置默认值

emit:子组件给父组件传递值(传递事件)

子:this.$emit('事件名', 传递的参数)

父:@事件名=“处理的方法”;  处理的方法(拿到子的数据)

自定义事件:兄弟组件进行通讯 event.$on


要接受的组件:event.$on('事件名', 处理值的方法)

要传递的组件:event.$emit('事件名', 传递的值)

在beforeDestroy()里及时销毁注册的组件 event.$off('事件名', 处理值的方法)

event是引用到这些组件里的,本身就是new Vue() 一个实例
初始化父子组件执行顺序

先触发父元素,然后子元素先进行,父元素收尾。

父beforeCreate => 父created => 父beforeMount => 子beforeCreate => 子created => 子beforeMount

=> 子mounted => 父mounted

删除子组件触发生命周期顺序

只有把子组件渲染完,父组件才能渲染完

加载渲染过程:

父beforeUpdate => 子beforeDestroy => 子destroyed => 父updated

子组件更新过程:

父beforeUpdate=>子beforeUpdate=>子Updated=>父updated

父组件更新过程:

父:beforeUpdate=>updated

销毁过程:

父beforeDestroy=>子beforeDestroy=>子destoryed=>父destroyed

EventBus又称事件总线,相当于一个全局的仓库,任何组件都可以去这个仓库里获取事件

const events = new Vue() 发送事件的语法:this.$EventBus.$emit(发送的事件名,传递的参数) 接收事件的语法:this.$EventBus.$on(监听的事件名, 回调函数)

computed

多对一或者一对一

计算属性具有缓存,data不变则不会重新计算基于响应式依赖数据(基于data中声明过或者父组件传递的props中的数据)发生改变,才会重新进行计算

watch

一对多

不支持缓存,数据变,直接会触发相应的操作

接收两个参数,一个新的值;一个参数是输入之前的值

deep: 深度监听,为了发现对象内部值的变化,复杂类型的数据时使用

watch监听引用类型拿不到oldVal、因为指针相同此时已经指向了新的val,值类型可以拿到。