父子组件通信最原始的方式(props,父传函数子实现函数)
1.父传子(props:让组件接收外部传过来的数据)
步骤
:
-
父组件通过给子组件标签里边绑定 :xxx(名)="xxxx(要传的值)" 这个东西
注意,如果传递的数据没有在data函数里边,xxx(名)前面不需要:,如果在data对象里边就需要:
-
子组件通过props:['xxx(名)']来确认一下,再渲染到页面
props配置项:
-
功能:让组件接收外部传过来的数据
-
传递数据:
<Demo name="xxx"/>
-
接收数据:
-
第一种方式(只接收):
props:['name']
-
第二种方式(限制类型):
props:{name:String}
-
第三种方式(限制类型、限制必要性、指定默认值):
props:{ name:{ type:String, //类型 required:true, //必要性 default:'老王' //默认值 } } 复制代码
-
备注:props是只读的,Vue底层会监测你对props的修改,如果进行了修改,就会发出警告,若业务需求确实需要修改,那么请复制props的内容到data中一份,然后去修改data中的数据。
2.子传父(要求父组件给子组件一个函数)
步骤
- 子传父需要依赖事件,先在子组件定义好一个用来传值的事件(send)
<button @click="send">点我向父组件传值</button>
methods:{
send(){
}
}
复制代码
- 再在父组件定义一个方法接收子组件传来的值(reviceMessage(接收参数))
methods:{
reviceMessage(person){
console.log(person)
}
}
复制代码
- 然后父组件通过父传子的形式把方法传给子组件(:reviceMessage="reviceMessage")
<school-z :reviceMessage="reviceMessage"/>
复制代码
- 最后子组件用props['reviceMessage']来接,并且在send函数中通过调用父组件的方法this.reviceMessage(要传的参数)把参数传过去
props:['reviceMessage'],
methods:{
send(){
this.reviceMessage(this.person)
}
}
复制代码