[英]How to get Vue to update the actual DOM right away when nextTick doesn't work, from a .vue file?
[英]Vue isn't update DOM when data comes from ajax
我正在尝试从 ajax 响应向我的视图中添加一些数据。 我正在查看 devTools,看起来我已经更改了所有数据,但在视图中它显示为空值。
JS文件:
var app = new Vue({
el: '#app',
data: {
versions: [
{
name: 'A'
},
{
name: 'B'
},
{
name: 'C'
}
]
},
beforeCreate: function () {
var self = this;
axios.get('http://serviceUrl.com')
.then(function (response) {
self.parseResponse(response.data);
})
.catch(function (error) {
console.warn(error);
});
},
methods: {
addDataToVersion: function (version, propertyName, value) {
this.versions.forEach(function (element) {
if (element.name === version) {
element[propertyName] = value;
}
});
},
parseResponse: function (data) {
for (let key in data) {
let tag = key.split('.')[0];
let version = key.toString().split('.')[1];
let quantity = data[key];
this.addDataToVersion(version, tag, quantity);
}
}
}});
这是我的 html 代码片段。 version.name
显示良好,但来自 ajax ( version.VIEW, version.CLICK
) 的所有数据都没有显示。 我在检查器中看到它在数据对象的正确位置,所以我确定它在这里
<div class="columns"> <div v-for="version in versions" class="column is-one-third"> <div class="version-column"> <div class="tags has-addons"> <span class="tag">Version</span> <span class="tag is-primary">{{ version.name }}</span> </div> <p><span class="has-text-weight-semibold">Views:</span> {{ version.VIEW }}</p> <p><span class="has-text-weight-semibold">Conversions:</span> {{ version.CLICK }}</p> <p><span class="has-text-weight-semibold">CR:</span> 100%</p> </div> </div> </div>
您可以使用this.$set来避免反应性问题。
addDataToVersion: function (version, propertyName, value) {
var vm = this;
this.versions.forEach(function (element,index) {
if (element.name === version) {
vm.$set(`versions[${index}]`,propertyName, value);
}
});
}
如果您可以阅读https://v2.vuejs.org/v2/guide/reactivity.html#ad以了解您的问题发生的原因,那就更好了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.