我有一个对象,我想用v-for迭代并显示为一个表,但对象v-for
似乎没有检测到该对象已更改。
<tr v-for="(value, key) in translations">
<td>@{{ value.ar }}</td>
<td>@{{ value.en }}</td>
<td>@{{ key }}</td>
</tr>
Vue代码
import {createApp} from "vue";
import axios from 'axios';
const translationApp = createApp({
data() {
return {
translations:{}
}
},
created() {
axios.get("/api/translation").then(response => {
if (response.status === 200) {
this.translations = response.data;
}
});
}
});
translationApp.mount("#translations-app");
很明显,对象被填充:
注:@{{}}
语法是因为我使用的是Laravel Blade。
2条答案
按热度按时间olmpazwi1#
将转换设置为如下所示的新值后
Vue不知道它的属性已经改变,因为你已经覆盖了它的代理对象。
试试这样做
这样你就告诉Vue代理这个新对象(使它成为“reactive”),这样它就知道它的属性何时改变。
您可以在该对象上执行console.log,并亲自查看它是否具有由Vue定义的新属性,这些属性不是您显式设置的。
另一种选择是在属性初始化时定义所有可能的键,并重写这些键的值,而不是整个对象。
Read more about reactivity on Vue docs
czq61nw12#
您的代码应该可以正常工作,因为我没有看到您的实现中有任何问题。我假设您正在从API响应中获取一个对象数组,并将其分配回
translations
数据变量。现场演示**:**
您可以快速浏览一下上面的演示,并尝试找到您所面临问题的根本原因。