组件间通信
父传子:props
子组件代码: props
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57<template>
<div class="infos">
<h2>name:{{ name }}</h2>
<h2>age:{{ age }}</h2>
<h2>height:{{ height }}</h2>
<h2>Message:{{showMessage}}</h2>
</div>
</template>
<script>
export default {
name: "ShowInfo",
// 数组语法:接收父组件传递过来的属性
// 弊端:1.不能对类型进行验证 2.没有默认值
// props: ["name", "age", "height"]
props: {
name:{
type: String,
default: "defaultName"
},
age: {
type: Number,
require: true,
},
height: {
type: Number,
default: 0
},
// 对象类型必须写函数
friend:{
type:Object,
default(){
return {
message:"hello"
}
}
},
hobbies: {
type:Array,
default() {
return ["bas", "rap", "dance"];
}
},
showMessage:{
type: String,
default:"我是默认message"
}
}
}
</script>
<style scoped>
</style>父组件:子组件注册并应用,传递值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22<template>
<div>APpContent</div>
<ShowInfo name="lcy" :age=19 :height="198"></ShowInfo>
<hr>
<ShowInfo name="ct" :age=27 :height="166"></ShowInfo>
<hr>
<ShowInfo :age="18" show-message="hahhaaah"></ShowInfo>
</template>
<script>
import ShowInfo from "@/02_组件通信-父传子/ShowInfo";
export default {
name: "App",
components:{
ShowInfo,
}
}
</script>
<style scoped>
</style>非props的attribute
概念
- 如果当前的属性是一个非prop的attribute,那么改属性会默认添加到子组件的根元素上
- 当然可以禁用 inheritAttrs:false
- 禁用以后还想拿到,:class=”$attrs.禁用的属性”
1 |
|
1 |
|
当不禁用attribute时且有多个根节点时,要手动指定绑定,不然会警告
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37<template>
<div class="infos">
<h2 :v-text="$attrs.address">name:{{ name }}</h2>
<h2>age:{{ age }}</h2>
<h2>height:{{ height }}</h2>
<h2>Message:{{showMessage}}</h2>
</div>
<div class="other" v-bind="$attrs">1111</div>
</template>
<script>
export default {
name: "ShowInfo",
// 数组语法:接收父组件传递过来的属性
// 弊端:1.不能对类型进行验证 2.没有默认值
// props: ["name", "age", "height"]
// 不禁用且有多个根节点的时候,要手动指定绑定到节点上 v-bind
// inheritAttrs:false,
props: {
name:{
type: String,
default: "defaultName"
},
showMessage:{
type: String,
default:"我是默认message"
}
}
}
</script>
<style scoped>
</style>子传父emit:
概念
1 |
|
1 |
|
通信案例
1 |
|
1 |
|