父组件向子组件传值——props方法
// 父组件App.vue
<template>
<div>
<p>我是父组件<p/>
<app-son :dataList="appData"><app-son/>
<div/>
<template/>
<script>
import appSon from './components/appSon/index'
export default {
name: 'app',
components: {
appSon
},
data(){
appData:{
title: '我是父组件的dataList的数据'
}
}
}
<script/>
// 子组件appSin
<template>
<div>
<p>我是子组件<p/>
<p>{{dataList.title}}<p/>
<div/>
<template/>
<script>
export default {
name: 'appSon',
props: {
dataList: {
trpe: [Object]
}
},
mounted(){
console.log(this.dataList.title)
}
}
<script/>
解释
- 在父组件
- 通过import引入appSon子组件
- 在
components注册子组件,也就是激活
- 在template里可以写子组件了,然后传参
<app-son :dataList="appData"><app-son/>
- 在子组件
- 要定义
props,定义父组件能传的值有那些,这个是必须写的
- js调用的的时候,可以在
mounted 里打印数据console.log(this.dataList.title)
- 定义了
dataList,在标签上用的时候通过 {{dataList.title}} 就可以调用了
- 最后父组件传过的来值,就当在
data里的数据一样使用
父组件调用子组件方法——$refs
通过$refs,父组件可以调用子组件方法和传参
<template>
<div>
// 写一个点击事件
<p @click="changeColor">我是父组件<p/>
// 在子组件上面加一个 ref="appSonRef"
<app-son :dataList="appData" ref="appSonRef"><app-son/>
<div/>
<template/>
<script>
import appSon from './components/appSon/index'
export default {
name: 'app',
components: {
appSon
},
data(){
appData:{
title: '我是父组件的dataList的数据'
}
},
methods: {
changeColor(){
this.$refs.appSonRef.changeSinColor('改变颜色')
}
}
}
<script/>
<template>
<div>
<p>我是子组件<p/>
<p>{{dataList.title}}<p/>
<div/>
<template/>
<script>
export default {
name: 'appSon',
props: {
dataList: {
trpe: [Object]
}
},
mounted(){
console.log(this.dataList.title)
},
methods: {
changeSinColor(data){
console.log(data)
}
}
}
<script/>
子组件调用父组件方法并且传参——$emit
<template>
<div>
<p @click="changeColor">我是父组件<p/>
// @notice="receiveSon" 在调用子组件的地方,绑定一个方法notice是给子组件调用用的,receiveSon方法是父组件的方法
<app-son :dataList="appData" ref="appSonRef" @notice="receiveSon"><app-son/>
<div/>
<template/>
<script>
import appSon from './components/appSon/index'
export default {
name: 'app',
components: {
appSon
},
data(){
appData:{
title: '我是父组件的dataList的数据'
}
},
methods: {
changeColor(){
this.$refs.appSonRef.changeSinColor('改变颜色')
},
receiveSon(data){
console.log(data)
}
}
}
<script/>
<template>
<div>
<p>我是子组件<p/>
<p>{{dataList.title}}<p/>
// 调用子组件的方法
<button @click="noticeFather">
点我通知父组件
<button/>
<div/>
<template/>
<script>
export default {
name: 'appSon',
props: {
dataList: {
trpe: [Object]
}
},
mounted(){
console.log(this.dataList.title)
},
methods: {
changeSinColor(data){
console.log(data)
},
noticeFather(){
this.$emit("notice",{name:'通知父组件的参数1',data:'通知父组件的参数2'})
}
}
}
<script/>
兄弟组件通信,或者父子层次比较深的——eventBus
provide 和 inject 主要为高阶插件/组件库提供用例。并不推荐直接用于应用程序代码中。