2 回答

TA貢獻1820條經驗 獲得超2個贊
不隨 AngularobjFlag
變化的原因cont.flag
與 Angular 無關。這是本機 Javascript 行為。
這個說法:
cont.obj = {objFlag: cont.flag, objFunction: cont.func};
只有一個初始分配cont.flag
值objFlag
和之間不存在正在進行的鏈路objFlag
和cont.flag

TA貢獻1803條經驗 獲得超3個贊
讓我們以其他方式思考您的代碼
cont.flag = 0;
cont.obj = {objFlag: cont.flag, objFunction: cont.func};
cont.func = function() {}
這相當于
var cont = {
flag: 0,
obj: {objFlag: cont.flag, objFunction: cont.func},
func: function() {}
}
console.log(cont.obj);
您可以在cont此處看到未定義的結果(無法讀取未定義的屬性“標志”)。我們無法將變量訪問到同一對象內的另一個變量中。
所以,你會想到在this這里使用
var cont = {
flag: 0,
obj: {objFlag: this.flag, objFunction: this.func},
func: function() {}
}
console.log(cont.obj);
同樣,您將獲得未定義的值,因為我們無法使用另一個變量訪問對象元素。但是我們可以使用函數來訪問它們。所以最后一個選擇是使用 obj 的 getter 函數將帶有其他變量數據的 json 返回到一個變量中。(在自引用 json 對象中)
var cont = {
flag: 0,
get obj() {return {objFlag: cont.flag, objFunction: cont.func}},
/*or*/
/* get obj() {return {objFlag: this.flag, objFunction: this.func}},*/
func: function() {}
}
console.log("Before change", cont.obj);
//change
cont.flag = 10;
console.log("After change", cont.obj);
更新
現在,將您的案例與上面的解釋結合起來,cont控制器的參考在哪里,如何在角度控制器中添加 getter 屬性。
Object.defineProperty方法就是你所需要的。所以你的最終代碼將是:
cont.flag = 0;
Object.defineProperty(cont, 'obj', {
get: function() {
return {objFlag: cont.flag, objFunction: cont.func}
}
});
cont.func = function() {}
// you can access obj property to see the values
console.log(cont.obj)
添加回答
舉報