Vue / Javascript 变量的奇怪问题
Weird issue with Vue / Javascript variables
老实说,我什至不知道如何搜索这个问题(要写什么搜索参数),但无论哪种方式都是有点奇怪的问题,我迫切需要帮助。
所以我想做一些简单的事情,事件发送 "form-change",当它发生时,我们在 "[=39] 中设置新值=]" 对象。相当简单。我不希望 this.data 有反应 我只是想更新它。
// Find our data object which we want to update/change
if (form.field.includes('.')) {
let find = form.field.split('.'), level = this.data;
for (let index = 0; index < find.length; index++) {
if (level[find[index]] !== undefined) {
level = level[find[index]];
} else {
level = undefined;
}
}
if (level !== undefined)
level = setFieldData();
}
这很简单,我们有字段名称 "inspect.book" 并且当更新到来时(事件)我们只需使用点拆分成多树并更新"this.data.inspect.book" 为新值。但它不起作用。值不变。
但是来自实际 this.data.inspect.book 的值使用:
console.log(level);
但是,如果我这样做:
this.data[ form.field.split( '.' )[ 0 ] ][ form.field.split( '.' )[ 1 ] ] = setFieldData();
它工作正常。所以对变量的“引用”不起作用......这怎么可能?看起来像是 javascript 中的错误,或者是 vue/reactivity 中的错误?
有没有人知道如何让它工作?
所以您正在尝试使用符号来更新表单数据?
我会做那样的事情:
_update(fieldName, value) {
// We split segments using dot notation (.)
let segments = fieldName.split(".");
// We get the last one
let lastSegment = segments.pop();
// We start with this.data as root
let current = this.data
if(current) {
// We update current by going down each segment
segments.forEach((segment) => {
current = current[segment];
});
// We update the last segment once we are down the correct depth
current[lastSegment] = val;
}
},
如果我以你为例:
if (form.field.includes('.')) {
let find = form.field.split('.'), level = this.data;
for (let index = 0; index < find.length - 1; index++) {
if (level[find[index]] !== undefined) {
level = level[find[index]];
} else {
level = undefined;
}
}
if (level !== undefined)
level[find.pop()] = setFieldData();
}
我用 find.length - 1
替换了 find.length
并将 level = setFieldData()
替换为 level[find.pop()] = setFieldData()
你应该更新对象的 属性,而不是实际覆盖值,
因为如果您覆盖该值,原始值将不会更新。
老实说,我什至不知道如何搜索这个问题(要写什么搜索参数),但无论哪种方式都是有点奇怪的问题,我迫切需要帮助。
所以我想做一些简单的事情,事件发送 "form-change",当它发生时,我们在 "[=39] 中设置新值=]" 对象。相当简单。我不希望 this.data 有反应 我只是想更新它。
// Find our data object which we want to update/change
if (form.field.includes('.')) {
let find = form.field.split('.'), level = this.data;
for (let index = 0; index < find.length; index++) {
if (level[find[index]] !== undefined) {
level = level[find[index]];
} else {
level = undefined;
}
}
if (level !== undefined)
level = setFieldData();
}
这很简单,我们有字段名称 "inspect.book" 并且当更新到来时(事件)我们只需使用点拆分成多树并更新"this.data.inspect.book" 为新值。但它不起作用。值不变。
但是来自实际 this.data.inspect.book 的值使用:
console.log(level);
但是,如果我这样做:
this.data[ form.field.split( '.' )[ 0 ] ][ form.field.split( '.' )[ 1 ] ] = setFieldData();
它工作正常。所以对变量的“引用”不起作用......这怎么可能?看起来像是 javascript 中的错误,或者是 vue/reactivity 中的错误?
有没有人知道如何让它工作?
所以您正在尝试使用符号来更新表单数据?
我会做那样的事情:
_update(fieldName, value) {
// We split segments using dot notation (.)
let segments = fieldName.split(".");
// We get the last one
let lastSegment = segments.pop();
// We start with this.data as root
let current = this.data
if(current) {
// We update current by going down each segment
segments.forEach((segment) => {
current = current[segment];
});
// We update the last segment once we are down the correct depth
current[lastSegment] = val;
}
},
如果我以你为例:
if (form.field.includes('.')) {
let find = form.field.split('.'), level = this.data;
for (let index = 0; index < find.length - 1; index++) {
if (level[find[index]] !== undefined) {
level = level[find[index]];
} else {
level = undefined;
}
}
if (level !== undefined)
level[find.pop()] = setFieldData();
}
我用 find.length - 1
替换了 find.length
并将 level = setFieldData()
替换为 level[find.pop()] = setFieldData()
你应该更新对象的 属性,而不是实际覆盖值, 因为如果您覆盖该值,原始值将不会更新。