组件(父子通讯)
一、概括
在一个组件内定义另一个组件,称之为父子组件。
但是要注意的是:1.子组件只能在父组件内部使用(写在父组件tempalte中);
2.默认情况下,子组件无法访问父组件上的数据,每个组件实例的作用域是独立的;
那如何完成父子如何完成通讯,简单一句话:props down, events up :父组件通过 props 向下传递数据给子组件,子组件通过 events 给父组件发送
父传子:Props
子传父:子:$emit(eventName) 父$on(eventName)
父访问子:ref
下面对三个进行案例讲解:
二、父传子:Props
组件实例的作用域是孤立的。这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据。要让子组件使用父组件的数据,需要通过子组件的 props 选项
使用Prop传递数据包括静态和动态两种形式,下面先介绍静态props
1、静态props
<script src="https://unpkg.com/vue"></script>
<div id="example">
<parent></parent>
</div>
<script>
//要想子组件能够获取父组件的,那么在子组件必须申明:props
var childNode = {
template: '<div>{{message}}</div>',
props: ['message']
}
//这里的message要和上面props中值一致
var parentNode = {
template: `
<div class="parent">
<child message="我是"></child>
<child message="徐小小"></child>
</div>`,
components: {
'child': childNode
}
};
// 创建根实例
new Vue({
el: '#example',
components: {
'parent': parentNode
}
})
</script>
效果:

命名约定:
对于props声明的属性来说,在父级HTML模板中,属性名需要使用中划线写法
子级props属性声明时,使用小驼峰或者中划线写法都可以;而子级模板使用从父级传来的变量时,需要使用对应的小驼峰写法
上面这句话什么意思呢?
<script>
//这里需要注意的是props可以写成['my-message']或者['myMessage']都是可以的
//但是template里的属性名,只能是驼峰式{{myMessage}},如果也写成{{my-message}}那么是无效的
var childNode = {
template: '<div>{{myMessage}}</div>',
props: ['myMessage']
}
//这里的属性名为my-message
var parentNode = {
template: `
<div class="parent">
<child my-message="我是"></child>
<child my-message="徐小小"></child>
</div>`,
components: {
'child': childNode
}
};
</script>
内容版权声明:除非注明,否则皆为本站原创文章。
