我使用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