詳細描述:
$watch監視一個下拉框,期望情況是只有當使用者點選下拉框中的選項時,前端才要求後端更新資料。
目前的問題是:
當網頁載入時,下拉框第一次出現,$watch會自動執行一次,ng的機制認為載入就是一次使用者的點擊。
希望了解如何禁止這種情況的$watch自動執行
迷茫2017-05-15 17:06:22
謝邀。
首先,我可否修正一個用詞的小瑕疵。
你說“$watch監視一個下拉框”,ng
是一个实现数据双向绑定的,具有声明式API的框架,这里的$watch
是不可能去监视一个DOM元素下拉框
的。合適的用詞可以寫作"$watch監視的一個指向下拉框所選值的表達式"更為準確(語文好的朋友可以再優化)。
在提問時,我們往往過分關注自己想知道問題的答案,而忽略表達方式,結果經常無疾而終,這類題目在sf中非常常見,提問人描述含糊其辭,令人無從做答。其實題主的描述還能看懂,只是有感而發多說幾句。
言歸正傳,既然不想對資料初始化的那一次$watch
做處理,那可以這樣判斷一下
$scope.$watch('表达式', function(newVal, oldVal){
//当之前值和当前值相同,或者之前值为null或undefined时
if(newVal === oldVal || oldVal == null){
//不执行任何操作
return;
}
//你的正常代码,写这里
});
習慣沉默2017-05-15 17:06:22
使用ngChange可以避免初始化的呼叫
注意:
需要結合ngModel一起使用
使用程式更改ngModel的值並不會觸發ngChange
Evaluate the given expression when the user changes the input. The expression is evaluated immediately, unlike the JavaScript onchange event which only triggers at the end of a change (usually, en the user leaves the remot.
ngChange 文件