vuex非父子組件間改值
阿新 • • 發佈:2017-06-01
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非父子組件間改值