亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的 javascript obj 沒有在 angularjs 中更新?

為什么我的 javascript obj 沒有在 angularjs 中更新?

飲歌長嘯 2021-12-02 15:51:19
我正在使用 angularJS,并具有以下控制器變量:cont.flag = 0;cont.obj = {objFlag: cont.flag, objFunction: cont.func};cont.func = function() {    // do stuff}該cont.flag變量綁定到 HTML 中的用戶輸入。因此,當該值發生變化時,我希望objFlag更新它當前未執行的操作。此外,該objFunction值似乎始終未定義。這是因為 cont.obj 是在 cont.func 之上聲明的嗎?編輯:如果不清楚,則 cont.flag 變量正在由用戶輸入正確更新,它只是我 obj 中沒有更新的 cont.flag 指針。此外,objFunction 沒有填充我傳遞給它的函數。這是我在評論中提供的更多信息,說明為什么我將這些變量放在對象中而不是直接操作它們:所以我有一系列我想鏈接在一起的函數,但我想控制哪些函數可以運行. 所以我為每個函數都有一個 obj: objFlag 表示是否應該將函數添加到鏈中, objFunction 是要運行的實際函數。我想要一種將 objFlag 與它附帶的 objFunction 相關聯的方法
查看完整描述

2 回答

?
DIEA

TA貢獻1820條經驗 獲得超2個贊

不隨 AngularobjFlag變化的原因cont.flag與 Angular 無關。這是本機 Javascript 行為。

這個說法:

cont.obj = {objFlag: cont.flag, objFunction: cont.func};

只有一個初始分配cont.flagobjFlag之間不存在正在進行的鏈路objFlagcont.flag


查看完整回答
反對 回復 2021-12-02
?
繁星點點滴滴

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)


查看完整回答
反對 回復 2021-12-02
  • 2 回答
  • 0 關注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號