组件通信可以分为父子组件通信、非父子组件通信,可以是数据的传递,也可以是方法的传递,先介绍数据的相互传递,再介绍方法的相互传递。
父组件到子组件传递数据:
一、通过props,父组件可以传递动态和静态数据。
//父组件
<template>
<div id="app">
//第一种静态数据 <HelloWorld msg="我是父组件的数据"/>
//第二种动态绑定 <HelloWorld :msg="message"/>
</div>
</template>
<script>
import HelloWorld from './components/HelloWorld.vue'
export default {
name: 'app',
data(){
return{
message: '我来自父组件'
}
},
components: {
HelloWorld
}
}
</script>
//子组件
<template>
<div class="hello">
来自父组件的值:{
{msg}}
</div>
</template>
<script>
export default {
name: 'HelloWorld',
props: ['msg']
//或者 props: { msg: String//指定传入的类型 }
//或者 props: { msg: String,default: '默认值' //指定默认值 }
}
</script>
二、provide / inject
provide 和 inject 主要为高阶插件/组件库提供用例。并不推荐直接用于应用程序代码中。并且这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。
//父组件
<template>
<div>
<child-dom>
</child-dom>
</div>
</template>
<script>
import childDom from "./components/ChildDom.vue";
export default {
data() {
return{
}
},
provide: {
house: '房子',
car: '车子',
money: '¥10000'
},
methods:{
},
components:{childDom},
}
</script>
//子组件
<template>
<div>
</div>
</template>
<script>
export default {
data() {
return{
}
},
inject: {
house: {
default: '没房'
},
car: {