如何在 axios 调用后立即更新 Vue?
How can I update Vue immediately after an axios call?
我需要在 axios 调用后立即更新我的变量 this.xCtesPorRuta 以便我可以在 select 等元素上显示数据库中的一些信息. axios 调用通过按钮的 v-on:click 事件激活。
我将 axios 响应存储在变量上,但它不会立即更改,只有在单击另一个元素时才会更改。我正在尝试使用 nexttick 强制更新但没有成功。
第一次尝试:
var request = {rutas:this.xRutasSeleccionadas , tipos:this.xTipos}
axios.post('/querys/', request).then(response => this.xCtesPorRuta = response.data)
this.$nextTick(function() {
this.$forceUpdate();
});
我知道 Vue 在立即更新数组时遇到问题,但我之前设法通过使用 splice 方法强制更改数组,然后是 nextTick/forceUpdate hack。但是从来没有在 axios 调用之后。
编辑:我在这里错误地使用了 this
。感谢@Demonyowh 和@fracz 在这方面的帮助。
第二次尝试。结果与第一次尝试相同:
var myVar = this;
var request = {rutas:this.xRutasSeleccionadas , tipos:this.xTipos}
axios.post('/querys/', request).then(function (response) {
myVar.xCtesPorRuta = [];
for (var i=0; i<response.data.length; i++) {
myVar.xCtesPorRuta.splice(i, 1, response.data[i]);
}
})
this.$nextTick(function() {
this.$forceUpdate();
});
原来使用 splice
这次没有帮助。
这是因为 this
没有引用之前的对象.. 它引用了 axios.post
因为它在里面.. 你可以做的是
var myVar = this;
var request = {rutas:this.xRutasSeleccionadas , tipos:this.xTipos}
axios.post('/querys/', request).then(function (response) {
myVar.xCtesPorRuta = [];
for (var i=0; i<response.data.length; i++) {
myVar.xCtesPorRuta.splice(i, 1, response.data[i]);
}
})
变量立即更新!
"solution" 是实际使用 select 上的数据 我需要它:
<select multiple class="form-control">
<option v-for="cliente in xCtesPorRuta">@{{ cliente }}
</option>
</select>
我在 vue-devtools 上评估值,然后在页面上直观地显示它们。我没有继续前进,因为我只是认为它行不通 u.u。
我需要在 axios 调用后立即更新我的变量 this.xCtesPorRuta 以便我可以在 select 等元素上显示数据库中的一些信息. axios 调用通过按钮的 v-on:click 事件激活。
我将 axios 响应存储在变量上,但它不会立即更改,只有在单击另一个元素时才会更改。我正在尝试使用 nexttick 强制更新但没有成功。
第一次尝试:
var request = {rutas:this.xRutasSeleccionadas , tipos:this.xTipos}
axios.post('/querys/', request).then(response => this.xCtesPorRuta = response.data)
this.$nextTick(function() {
this.$forceUpdate();
});
我知道 Vue 在立即更新数组时遇到问题,但我之前设法通过使用 splice 方法强制更改数组,然后是 nextTick/forceUpdate hack。但是从来没有在 axios 调用之后。
编辑:我在这里错误地使用了 this
。感谢@Demonyowh 和@fracz 在这方面的帮助。
第二次尝试。结果与第一次尝试相同:
var myVar = this;
var request = {rutas:this.xRutasSeleccionadas , tipos:this.xTipos}
axios.post('/querys/', request).then(function (response) {
myVar.xCtesPorRuta = [];
for (var i=0; i<response.data.length; i++) {
myVar.xCtesPorRuta.splice(i, 1, response.data[i]);
}
})
this.$nextTick(function() {
this.$forceUpdate();
});
原来使用 splice
这次没有帮助。
这是因为 this
没有引用之前的对象.. 它引用了 axios.post
因为它在里面.. 你可以做的是
var myVar = this;
var request = {rutas:this.xRutasSeleccionadas , tipos:this.xTipos}
axios.post('/querys/', request).then(function (response) {
myVar.xCtesPorRuta = [];
for (var i=0; i<response.data.length; i++) {
myVar.xCtesPorRuta.splice(i, 1, response.data[i]);
}
})
变量立即更新!
"solution" 是实际使用 select 上的数据 我需要它:
<select multiple class="form-control">
<option v-for="cliente in xCtesPorRuta">@{{ cliente }}
</option>
</select>
我在 vue-devtools 上评估值,然后在页面上直观地显示它们。我没有继续前进,因为我只是认为它行不通 u.u。