1. 程式人生 > >vuex非父子組件間改值

vuex非父子組件間改值

blog 問題 ack mit 測試 == 留住 console 對象

最近在用vue寫單頁面項目嘛,然後就有遇到這問題啦,看了很多參考,要麽繁瑣的一塌糊塗,要麽就是傳值並不是改值,下面我述說下方法,最清晰的簡單demo

父子間用props

非父子間用vuex

  store(store/index.js)

state: {
    x:66
},
mutations:{
    add:function(state,x){//這邊的x來自於a.vue
        state.x=1+state.x;
    }
}.........

  a.vue

  先引用過來store(import { store } from ‘../store‘;新手來說會被多種花樣弄暈,還有import * as store form ......)

  data x:store.state.x

  然後這只是初始化話綁定,並不是一直綁定的

  所以,在執行動作時,要執行

console.log(this.x);//66
this.$store.commit(‘add‘);
this.x=store.state.x;
console.log(this.x);//67

  就相當於到store的x處理了下,怎麽處理就自己想怎麽弄就怎麽弄了,然後到b.vue

  b要修改a的x呢?

  咋整,還是改不了,因為a的x不是實時綁定store的x的

  然後我這麽整,將a的this傳過去到store,在store裏處理了a的x,居然有效果的

this.$store.commit(‘add‘,this);//將this對象傳到store那去
//this.x=store.state.x;

  

store
add:function(state,x){//x-a傳過來的this
    state.x=1+state.x;
    x.x=state.x;       //  ====this.x=store.state.x;(a裏面的)
}

  好了,the problem has solved

  既然a的x處理在store裏面,然後在store裏面在a調用store的add時把a的this留在store裏面嘛,

store
state: {
    	x:66,
    	home:‘‘
},...........
add改成:
add:function(state,x){
    state.x=1+state.x;
    x.x=state.x;
    state.home=x;//留住a的this
},

  然後store裏新加個方法,給b用的

back:function(state){
    state.x--;
    state.home.x=state.x;
}

  b

this.$store.commit(‘back‘);

  好了,經測試ok的,沒有用到那麽多的getters,mutations........就是一個跨組件修改值

vuex非父子組件間改值