vue组件中的传值方式,父子组件,兄弟组件,隔代组件等。看了官网的一些介绍和文档以及一些学习的文章,然后就记下来。方便后面再次学习或者复习。
父组件 => 子组件
属性:props
//child props:{msg:string} //parent <HelloWorld msg="welcome to your Vue.js App"/>
特性:$attrs
//child:并未在props中声明foo,当值传进来时会被归纳到特性中 <p>{{$attrs.foo}}</p> //parent <HelloWorld foo="foo"/>
引用:refs
//parent <HelloWorld ref="hw"/> mounted(){ this.$refs.hw.xx='xxx' //本来子组件中的是一个x现在修改三个x } //child <p>{{xx}}</p> data(){ return{ xx: 'x' } }
子元素:$child (子元素不保证顺序)
//parent
<HelloWorld />
mounted(){
this.$child[0].xx='xxxxx'
}
//child <p>{{xx}}</p> data(){ return{ xx: 'x' } }
子组件 => 父组件:自定义事件
//child this.$emit('add',good) //parent <Cart @add="cartAdd($event)"><Cart/> ps:事件谁派发谁监听
兄弟组件:通过共同祖辈组件
通过共同的祖辈组件搭桥,$parent 或 $root.
//brother1 this.$parent .$on('foo',handle) //brother2 this.$parent.$emit('foo')
例子: (没有去重)
//parent
<HelloWorld />
<HelloWorld />
//child
mounted(){
this.$on('foo',()=>{
console.log('foo....')
})
this.$emit('foo')
}
祖先和后代之间
由于嵌套层数过多。传递props不切实际,vue提供了provide/inject API完成该任务
provide/inject:能够实现祖先给后代传值(写法类似于props)
//ancestor provide(){ return {foo:'foo'} } //descendant inject:['foo']
例子:
//祖先
export default{
provide(){
return{
something:'something'
}
}
}
//后代
export default{
inject:{ //可以直接注入,(响应式)
msg:'something'
}
}
先总结了这些,下篇会总结 事件总线 Bus,vuex 和插槽的用法。这些总结都是学习开课吧中课程进行总结的,有兴趣的可以去看一下开课吧的课程。共勉!