1.父子组件之间的传值
1)父向子传递:
父组件通过v-bind绑定一个变量,子组件通过prop接收这个变量
父组件
<template>
<div>
<m-child :message="'Parent message'" ></m-child>
</div>
</template>
<script>
// 引入子组件
import MChild from '@/components/Child'
export default {
data () {
return {
message: ''
}
},
components: {
MChild,
},
子组件
<template>
<div>
<h1>{{message}}</h1>
</div>
</template>
<script>
export default {
// 要接受父组件传递的参数
props: {
message: {
type: String,
default: ''
},
},
2)子向父传递:
子组件在函数内发起$emit,传递函数名以及参数,父组件在子组件的身上设置v-on传递过来的函数名,并调用自己的函数
子组件
<template>
<div>
<button @click="takeMsg"></button>
</div>
</template>
export default {
methods: {
takeMsg() {
this.$emit("takeMsg", "这是子组件传递的值");
}
},
}
父组件
<template>
<div>
<h1>{{message}}</h1>
<m-child @takeMsg='takeMsg'></m-child>
</div>
</template>
import MChild from '@/components/Child'
export default {
components: {
MChild,
},
data(){
return {
message: ''
}
},
methods: {
takeMsg(value) {
this.message=value;
}
},
}
2.非父子组件之间的传递
1)Vuex
2)建立一个公共的js文件,专门用来传递消息
message.js
import Vue from 'vue'
export default new Vue
在需要传递消息的地⽅引⼊这个文件,并通过message .$emit传递
import message from './util/message'
methods: {
passMsg () {
message.$emit('message', 'i am a message')
}
},
在需要接收消息的地方使用message .$on接收消息
mounted () {
message.$on('message', (value) => {
this.childMessage = value
});