Vue中的父子组件通信——props和$emit
- 父传子——props
- 子传父——$emit
- 举例——父传子
场景:子组件需要得到父组件data中的信息,并将其渲染到页面中
<!-- 父组件 -->
<template>
<div id="app">
<child :travel="books"></child><!-- travel是自定义的名字,但是必须跟子组件里props的属性值一样,books为父组件data里定义的值 -->
</div>
</template>
<script>
import child from "./components/child";
export default {
name: "App",
components: {
child,
},
data() {
return {
books:['Linux变成','软件工程','分布式系统开发','网络安全']
};
},
};
</script>
<!-- 子组件 -->
<template>
<div>
<ul>
<li v-for="(value,index) in travel" :key="index">{{value}}</li><!-- 在这里实现父组件中数组的遍历 -->
</ul>
</div>
</template>
<script>
export default {
name: "child",
props:{
travel:{//与父组件自定义的名字相同
type:Array,//类型为Array
}
},
};
</script>
运行结果:
- 举例——子传父
场景:子组件里的某个按钮被点击,父组件里的内容被修改
<!-- 父组件 -->
<template>
<div id="app">
<h1>{{text}}</h1>
<child @change="changeText"/><!-- change与子组件里$emit定义的字符串相同 -->
</div>
</template>
<script>
import child from "./components/child";
export default {
name: "App",
components: {
child,
},
data() {
return {
text:'我是父组件的data值'
}
},
methods: {
changeText(arg){
this.text=arg//点击将父组件里的data值替换成子组件的data值
}
},
};
</script>
<!-- 子组件 -->
<template>
<div>
<button @click="passEvent">我是子组件</button>
</div>
</template>
<script>
export default {
name: "child",
data() {
return {
arg:'我是子组件里的data值'
}
},
methods: {
passEvent(arg){//传递一个参数
this.$emit('change',this.arg)
}
},
};
</script>
运行结果: