angular中ng if和 watch衝突問題

2021-08-19 16:54:43 字數 669 閱讀 7285

問題:專案中需要通過按鈕控制div的顯示和隱藏,開始選用的ng-if控制,但是div中還需要用$watch監聽select框的變化,發現無法監聽到select中的資料變化;

1、由於該select在別的模組中也是通過$watch監聽的,資料都正常,所以第一感覺就是ng-if的問題;

2、檢視ng-if的定義:官方解釋ng-if :表示式內值為true是,生成標籤內的dom,否則移除。官方解釋ng-show:表示式內值為true是,顯示標籤內的dom,否則隱藏。ng-if同no-show最本質的區別是,它不是通過css顯示或隱藏dom節點,而是真正生成或移除節點。ng-if 表示式內的值初始為false的時候 他裡面的由select的 model繫結的scope是不會存在作用域裡面的,當if的值為true的時候,相當於生成了乙個新scope值,但是原先的watch仍然是檢測不到新生成的model的值的

3、這樣解決辦法就有了,把ng-if替換成ng-show可以解決;

4、如果必須用ng-if的話,就用另一種辦法,就是在需要watch的model中新增$parent,例如將ng-model="gamecity"更改為ng-model="$parent.gamecity"

ng show和ng if的區別

第一點區別是,ng if 在後面表示式為 true 的時候才建立這個 dom 節點,ng show 是初始時就建立了,用display block 和 display none 來控制顯示和不顯示。第二點區別是,ng if 會 隱式地 產生新作用域,ng switch ng include 等會動態...

如何在ng if中取得ng model的值

來北京工作快乙個月了吧,專案是我感興趣的angular框架的,遇到和解決了一些坑。今個遇到的都是定義域的問題,首先是directive復用,scope衝突,需要配置scope引數,然後就是ng if會開闢一塊定義域 這也是ng if與ng show的一大區別 話不多說,上 一看便知。如何在ng if...

Zookeeper如何正確設定和獲取watcher

watcher 設定是開發中最常見的,需要搞清楚watcher的一些基本特徵,對於exists getdata getchild對於節點的不同操作會收到不同的 watcher資訊 state 112 會話超時狀態 state 113 認證失敗狀態 state 1 連線建立中 state 2 暫時不清...