2015-04-03 19 views
3

當$ $觀察其名稱中帶有下劃線或駱駝案例的變量時,$ watch不會觸發。如果$ watch'ed的變量名不包含任何下劃線或駱駝的情況下,它的作品。我沒有發現任何關於Angular文檔中的$ watch'ed變量名的討論。

下面是在$手錶未能觸發代碼: http://jsbin.com/potiferixu/1/edit?html,console,output

下面是在$表得到正確觸發代碼: http://jsbin.com/sulugukaka/2/edit?html,console,output

唯一的區別是變量名。

回答

3

在AngularJS中,當您在指令內引用具有下劃線的變量時,您必須使用camelcase版本。

從官方documentation:

角正常化元素的標籤兩者和屬性名稱確定 哪些元素匹配該指令。我們通常參考 指令,以其區分大小寫的camelCase規範化名稱(例如 ngModel)。但是,由於HTML不區分大小寫,因此我們通過小寫形式在DOM中引用 指令,通常使用 有關DOM元素(例如,ng-模型)的破折號分隔的屬性。

所以,你應該在範圍內使用這樣的:

scope: { 
    fieldWithUnderscore: '=' 
}, 

,這裏面的$watch

console.log(scope.fieldWithUnderscore); 

(正如你指出的那樣),也可以改變:

scope.$watch('fieldWithUnderscore' 

更新版本http://jsbin.com/zoqupizuvi/2/edit

+1

謝謝@thebelowcode,你回答了我的問題。您是否會將$ watch從field_with_underscore更改爲fieldWithUnderscore? – 2015-04-03 10:41:10

+0

這是一個約定,我不會重命名它,因爲我想尊重AngularJS約定。但它可能會令人討厭,記得第一次,並造成麻煩 – Michael 2015-04-03 10:45:04

+0

事情是,如果你像'scope。$ watch('field_with_underscore',function(){',當你點擊更改按鈕,$ watch如果行被改爲'scope。$ watch('fieldWithUnderscore',function(){'在你的例子中:http://jsbin.com/zuhofajesa/2/edit – 2015-04-03 10:47:55