VUE NOTE——组件化
2020-12-15
2222
一、 父子组件之间的通信
- 父传子: props
在子组件中有props属性,props:['childData','childMovies']这种不常用。在父组件中使用子组件时:1
2
3
4
5
6
7
8
9
10
11
12props: {
childData: {
type: String,
default: "hi",
reuiqred: false
},
childMovies: {
type: Array,
default () {
return [];
}
}<cpn :child-data="ParentData" :child-movies="ParentMovies"></cpn>
v-bind动态绑定的属性 不可以用驼峰表示, childData 改为 child-data
子组件的template中:1
2<div v-for="let movie in childMovies"></div>
<p>{{childData}}</p> - 子传父:
$emit event
在子组件的methods中:btnClick(){this.$emit('itemClick', item)}
第一个参数:自定义事件名称
第二个参数:向父组件发送的数据
在父组件html中监听子组件自定义的事件:<cpn @itemClick="processItem()"></cpn>
父组件的methods中: processItem(item){处理item} - 父组件访问子组件
- this.$children
$children是一个数组,里面放着该组件内的所有子组件对象 - $refs 默认是空对象
这种访问方式比较常用
在子组件中给ref属性赋值,相当于该组件的key,<cpn ref="invoice"></cpn>
在父组件中, this.$refs.invoice即可拿到子组件
- this.$children
- 子组件访问父组件 (一般很少用到)
1.this.$parent.name直接访问父组件
2.this.$root.msg访问根组件(Vue实例)
二、 slot
- 给子组件预留插槽
<template><div>
<h1>子组件标题</h1>
<slot><slot></div></template>
在父组件中使用时:
<cpn><p>替换标题<p><cpn><p>XXXX</p> 会替换<slot></slot>
给slot传默认值 <slot><div>若使用子组件时不传值 则显示此默认值</div></slot>
- 具名插槽
<slot name ="back"><p>默认返回</p></slot><cpn><button slot="back">返回</button></cpn>
- 作用域插槽 slot-scope
用来在父组件中获取子组件的数据。
父组件替换插槽的标签,但是数据内容由子组件来提供
父:此处的template在2.5.XX以上的版本中可任意标签 eg: div p<div> <cpn> <template slot-scope = "slot"> <div v-for="let item in slot.data"> {{item.name}} </div> </template> </cpn> </div>
子: 此处动态绑定属性 data为自定义的名字
<template>
<p>标题</p>
<slot :data="items"></slot>
</template>
三、template 属性 和 el属性
当二者同时存在, template里的html会直接替换el挂载的内容
- 本文作者:JSZ
- 本文链接:blog.vampuck.com/2020/12/15/vue_noted_component/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!
查看评论