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,值类型可以拿到。