vue组件化
事件的派发和更新通常是同一个组件。注意点
误区:子组件$emit,父组件监听子组件的@EventName ,认为是父组件监听,子组件派发。
$attrs
/$listeners
编码效率组件封装常用点
爷孙组件传参常用点⭐
//index.vue
<Parent msg="msg from grandpa" @foo="onFoo"></Parent>
//Parent.vue
//属性展开
<Child2 v-bind="$attrs" v-on="$listeners"></Child2>
//child2.vue
//template
<p>{{$attrs.msg}}</p>
//methods
sendToChild1() {
this.$emit('foo')
}
这样可以在父辈组件中将属性传递下去,不用额外设置props,🌰
:props-name="someData"
这样形式传递。
$listeners
的作用可以少些很多代码,比如在父辈组件中绑定@event-name="someEventName"
,子辈组件$emit
的时候可以隔级传递自定义事件。不需要一层一层传递自定义事件。
provide/inject
编码效率组件封装常用点
跨多级组件传参常用
//index.vue
provide() {
return {
bar: 'bar'
}
},
//child.vue
inject:['bar'] //用法1
inject: {
bar1: {
from: 'bar',
default: 'barrrrrrrr' //默认值
}
}, //用法2
inject: {
bar1: 'bar'
}, //用法3
inheritAttrs: false
Vue.extend
const Constructor = Vue.extend(component) // 生成构造器
const instance = new Constructor() // 创建实例
instance.$mount('body') //挂载body