非父子组件传值一
Event BUS总线方法:通过新建一个vue实例,来实现$on接收和$emit 来触发事件
1、新建bus.js文件:
// common/bus.jsimport Vue from 'vue';
// 使用 Event Bus
const bus = new Vue();
export default bus;
2、组件1(接收通知信息)
import bus from '@/common/bus.js'export default{
data(){
return {
collapseData: ''
}
},
created() {
// 监听collapse,有变动就会收到通知,并改变collapseData值
bus.$on('collapse', msg => {
this.collapseData = msg
})
}
}
3、组件2(发布信息)
import bus from '@/common/bus.js'export default {
methods: {
sendData(){
// 发布信号,触发这个函数,其他的接收函数都会收到相应的信息
bus.$emit('collapse', '信息')
}
}
}
非父子组件传值二
借组vux插件实现组件之间的传值。
1、通过npm加载vuex,创建store.js文件,然后在main.js中引入,store.js文件代码如下:
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex);
const state = {
message:'Hello World'
};
const mutations = {
newMessage(state,msg){
state.message = msg
}
}
export default new Vuex.Store({
state,
mutations
})
3、在组件中存vuex的值,一般如下:
state里面的值只能通过Action来提交来修改和赋值。
<template>
<div>
<input type="text" @blur=saveName(username) v-model="username">
</div>
</template><script type="text/javascript">
// 引入mapActions,很重要
import { mapActions } from 'vuex'
export default {
data() {
return {
username:'',
password: ''
}
},
methods: {
...mapActions({
// 在input 的blur 事件中触发回调,并将输入值作为参数返回到store中
saveName: 'saveName'
})
}
}
</script>
3、在组件中获取Vuex的值,一般如下:
<template>
<div id="list">
{{_name}}
</div>
</template><script>
import {mapState} from 'vuex'
export default {
name: 'List',
data() { return{} },
computed: {
// 1普通写法
// name() { return this.$store.state.name }
// 2简洁写法
//...mapState(['name'])
// 3重命名










