vue 中几种传值方法(3种)

2020-06-12 20:51:35易采站长站整理

非父子组件传值一

Event BUS总线方法:通过新建一个vue实例,来实现$on接收和$emit 来触发事件

1、新建bus.js文件:


// common/bus.js

import 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重命名