vue中经常用到组件,组件的好处是

1、如果有一个功能很多地方都会用到,写成一个组件就不用重复写这个功能了;
2、页面内容会简洁一些;方便管控;

这个是父子组件传参的两种方法

第一种 使用props

父页面:parent.vue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<template>
<div class="sidebar_contianer">
<sidebar-item :routerData="transmitData"></sidebar-item>
</div>
</template>
<script>
import sidebarItem from './sidebarItem'
export default {
data(){
return{
transmitData:{
title:'首页',
uuid:'123'
}
}
},
components:{
sidebarItem
}
}
</script>

第一步:用import引入子组件

第二步:在components中注入子组件

第三步:在子组件中定义一个指令:routerData=”transmitData” (routerData名称需要和子组件中的props保持一致,transmitData是要传递给子组件的数据)

子页面:child.vue

1
2
3
4
5
6
7
8
9
10
11
<script>
export default {
name:'sidebarItem',
props:{
transmitData:{
type:Object,
default:null
}
}
}
</script>

第四步:在子组件中定义props属性,transmitData的type可以自定义类型(但是必须和父组件中的数据类型一致,否则会报错),default是默认值

第二种使用$emit

子页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<template> 
<div class="testCom">
<input type="text" v-model="message" />
<button @click="click">发送消息给父组件</button>
</div>
</template>
<script>
export default {
data() {
return {
message: '我是来自子组件的消息'
}
},
methods: {
click() {
//1、childFn 组件方法名,父组件中用childFn方法接收子组件中的数据;2、message是传递给父组件的数据
this.$emit('childFn', this.message);
}
}
}
</script>

第一步:this.$emit(“方法名”,”传递给父组件的数据”)

父页面:b.vue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<template>
<div>
<child-com @childFn="parentFn"></child-com>
</div>
</template>

<script>
export default {
// ...
data: {
message: ''
},
methods: {
parentFn(childData) {
this.message = childData;
}
}
}
</script>

第二步:父组件中注入子组件(此处代码中省略,如要参考请看情况一)

第三步:定义方法childFn(必须和子组件中方法名一致),parentFn定义可随意。