- 父组件可以改变子组件的值,而子组件不能直接改变父组件的值!!
1.父组件->子组件 (用props)
父组件 html部分
<div class="component-study">
<h1 style="margin-bottom: 30px">component-study</h1>
<test-one :one="oneValue"></test-one>
<test-two :two="twoValue"></test-two>
</div>
复制代码
父组件 js部分
import testOne from "../template/test-1.vue"
import testTwo from "../template/test-2.vue"
export default {
name: 'component-study',
data(){
return {
oneValue:'one',
twoValue:'two'
}
},
components:{
"test-one":testOne,
"test-two":testTwo
}
}
复制代码
子组件 html部分
<template>
<div class="test-1">
<div class="title">组件1获取父组件的值:</div>
<div>{{one}}</div>
</div>
</template>
复制代码
子组件 js部分
export default {
name: '',
props:['one'],
data(){
return {
}
},
created(){
console.log(this.one);
}
}
复制代码
2.子组件->父组件 (用emit)
个人认为:子组件先声明一个方法,然后传值到父组件,父组件然后利用这个方法来获取这个值
子组件 js部分
export default {
name: '',
props:['one'],
data(){
return {
sendData:'one',
}
},
created(){
this.$emit('getOneDataName',this.sendData);
}
}
复制代码
父组件 html部分
<template>
<div class="component-study">
<h1 style="margin-bottom: 30px">component-study</h1>
<test-one @getOneDataName="getOneData" :one="oneValue"></test-one>
</div>
</template>
复制代码
父组件 js部分
export default {
name: 'component-study',
data(){
return {
oneValue:'one',
twoValue:'two'
}
},
components:{
"test-one":testOne,
"test-two":testTwo
},
methods:{
getOneData(data){
console.log(25,data);
}
},
created(){
}
}
复制代码
3.同级组件传值 利用eventBus
3-1 先在src目录下新建一个 eventBus.js (其实就是一个vue对象)
import Vue from 'vue'
let eventBus = new Vue()
export default eventBus
复制代码
组件A js部分
import eventBus from '../assets/js/eventBus'
eventBus.$emit('testFn','666');
复制代码
组件B js部分
import eventBus from '../assets/js/eventBus'
eventBus.$on('testFn',(data)=>{
console.log(data)
});
复制代码
子组件->父组件 (v-slot)
v-slot 标题3