我不确定这是否与VueJS或JS本身有关。
我的数据库中有字符串(用JSON.stringify()转换为JS对象),如下所示:
{"type":5,"values":{"7":"/data/images/structured-content/64-7-scico.jpg","8":"<b>wefwe</b>","9":"Nějaký text","10":"/data/images/structured-content/64-10-scico.jpg"}}
我想做的是从数据库中选择它(通过Axios),将其转换回JS对象,并将其设置为VueJS数据:
.then(response => {
if (response.data.response === "ok" && response.status == 200) {
// get data
let data = response.data.data.data[0];
// pass name to state
this.objectName = data.name;
// get json in string format
let result = data.content;
// first log
console.log(result);
// convert string to json
let content = JSON.parse( result );
// second log
console.log( content.values );
// update states
this.IDType = content.type;
this.values = content.values;
}
})
Axios , data.name 和 content.type 工作正常,但是第二个日志( content.values )似乎正在返回带有空字符串的观察者,我无法将其传递给Vue数据并使用它,如您在下面的屏幕中所见,无论我做什么,该对象中的值都是空的。 这到底有什么问题?谢谢!
来自调试器:
答案 0 :(得分:0)
要做出反应,Vue需要在分配对象之前知道对象的键。因此,如果知道它们,请预先分配它们:
data : () => ({
values : {
7 : "",
8 : "",
9 : "",
10 : ""
}
}),
然后使用对象分配进行设置:
Object.assign(this.values, content.values)
如果键是未知/动态值,则可以使用$set
方法将其设置为响应式:
Object.keys(content.values).forEach(
function(key){
this.$set(this.value, key, content.values[key])
}
)