老實說,我什至不知道如何搜索這個問題(要寫什么搜索引數),但無論哪種方式,它都有點奇怪的問題,我迫切需要幫助。
所以我想做一些簡單的事情,事件發送“form-change”,當它發送時,我們在“this.data”物件中設定新值。相當簡單。我不希望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 有關?
有沒有人有更好的想法如何讓它發揮作用?
uj5u.com熱心網友回復:
所以你正在嘗試使用 to notation 更新表單資料?
我會做這樣的事情:
_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并被find.length - 1
替換level = setFieldData()level[find.pop()] = setFieldData()
您應該更新物件的屬性,而不是實際覆寫該值,因為如果您覆寫該值,則原始值將不會得到更新。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/461767.html
標籤:javascript Vue.js 指针 参考
