我使用vue與vuex vue的webpack模板,我基本上與組件狀態不更新的問題。Vue.js/vuex ajax更新組件與阿賈克斯狀態
我有一個商店
const state = {
userData: {},
}
在我的應用我有一個方法
methods: {
addUserData: function() {
const that = this;
axios.get('URL').then(function (response) {
let obj = response.data;
that.$store.commit('addUserData', {obj});
});
},
我打電話的時候,它的安裝
mounted() {
this.addUserData();
},
這與突變更新
const mutations = {
addUserData(state, {obj}) {
state.userData = obj;
},}
一切都很好,直到這裏,數據進入商店罰款。但後來我有一個組件沒有工作,因爲它不會等待ajax完成加載,也不會以任何方式綁定。我很可能在這裏做不對,但基本上在我的組件我有
data() {
return {
weekData : {
weekDataList: []....
methods: {
tester: function(a) {
// Sorting the userdata using lowdash
this.weekData.weekDataList = _.values(this.$store.state.userData);
},
},
我把這種以同樣的方式,因爲我之前做過
mounted() {
this.tester();
},
的問題是,this.weekData.weekDataList總是返回一個空數組,因爲商店中的userData尚未完成。我有幾十種執行各種計算的方法,都基於這一個數組,所以如果一個失敗,他們都會失敗。
也許我的方法是錯誤的,但理想情況下,我希望更新商店後更新數據屬性?我試着用計算屬性來做這件事,並且{{whatever}}正常工作,但不知道如何更新組件數據。
感謝@codebryo沒錯那效果很好,但我認爲userData只能通過在輸出中使用{{userData}}來訪問。我可以在像this.userData這樣的組件內的某個地方使用它,也許可以使用其他方法或其他方法。當範圍用ajax更新時,我需要本地數據進行更新,因爲其他方法反過來依賴於這一點數據。 – webknit
您可以像使用任何數據屬性或方法一樣使用'userData',因爲Vue爲它創建了一個getter和setter。而且,它計算出它們將自動更新。 'this。$ store'是被動的,所以一旦這個改變,userData將被重新評估,並且隨着改變,weekData也會自動更新。所以一切都發生異步就好了。 – Codebryo
這很合理,現在可以在其他計算函數中使用。假設我想獲得第一個userData元素,{{userData [0]}}似乎不起作用,也不會在userData計算屬性上返回以下內容。 var arr = weekDataList:_.values(this.userData) return arr [0] – webknit