vue组件中的几种传值方式----上篇

406 阅读1分钟
vue组件中的传值方式,父子组件,兄弟组件,隔代组件等。看了官网的一些介绍和文档以及一些学习的文章,然后就记下来。方便后面再次学习或者复习。

原文:www.cnblogs.com/yearshar/p/…


父组件 => 子组件

属性:props

1
2
3
4
5
6
//child
props:{msg:string}
//parent
<HelloWorld msg="welcome to your Vue.js App"/>

 

特性:$attrs

1
2
3
4
5
6
//child:并未在props中声明foo,当值传进来时会被归纳到特性中
<p>{{$attrs.foo}}</p>
//parent
<HelloWorld foo="foo"/>

  

引用:refs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//parent
<HelloWorld ref="hw"/>
mounted(){
this.$refs.hw.xx='xxx' //本来子组件中的是一个x现在修改三个x
}
//child
<p>{{xx}}</p>
data(){
return{
xx: 'x'
}
}

子元素:$child (子元素不保证顺序)

1
//parent
1
<HelloWorld />
1
mounted(){<br>this.$child[0].xx='xxxxx' <br>}<br><br>
1
2
3
4
5
6
7
8
9
//child
<p>{{xx}}</p>
data(){
return{
xx: 'x'
}
}

  

 子组件 => 父组件:自定义事件

1
2
3
4
5
6
7
8
//child
this.$emit('add',good)
//parent
<Cart @add="cartAdd($event)"><Cart/>
ps:事件谁派发谁监听

  

兄弟组件:通过共同祖辈组件

通过共同的祖辈组件搭桥,$parent 或 $root.

1
2
3
4
5
//brother1
this.$parent .$on('foo',handle)
//brother2
this.$parent.$emit('foo')<br><br><br><br><br>例子: (没有去重)<br>//parent
1
<HelloWorld />
1
<HelloWorld />
1
<br>//child<br><br>mounted(){<br>this.$on('foo',()=>{<br>  console.log('foo....')<br>})<br>this.$emit('foo')<br><br>}

  

祖先和后代之间

由于嵌套层数过多。传递props不切实际,vue提供了provide/inject API完成该任务

provide/inject:能够实现祖先给后代传值(写法类似于props)

1
2
3
4
5
6
7
//ancestor
provide(){
return {foo:'foo'}
}
//descendant
inject:['foo']<br><br><br><br>例子:<br>//祖先<br><br>export default{<br> provide(){<br> return{<br> something:'something'<br> }<br> }<br>}<br><br>//后代<br>export default{<br>  inject:{ //可以直接注入,(响应式)<br> msg:'something'<br> }<br>}<br><br>

  

先总结了这些,下篇会总结 事件总线 Bus,vuex 和插槽的用法。这些总结都是学习开课吧中课程进行总结的,有兴趣的可以去看一下开课吧的课程。共勉!