2014-09-11 23 views
1

我正在嘗試爲AngularJS ng-grid實現過濾器。觀察範圍對象包含特殊字符作爲鍵

AngularJS Filter Example

Issue Fiddle

function app($scope){ 
    $scope.filter = {}; 
    $scope.filter.$ = ''; 
    $scope.filter.name = ''; 
    $scope.filter.phone = ''; 

    $scope.$watch('filter', function(new_value, old_value){ 
     $scope.filtered = JSON.stringify(new_value); 
    }, true); 
} 

問題

關注工程namephone但不是$。我沒有得到這個問題,有人可以幫我嗎?

+2

我只能認爲Angular廣泛使用'$'來指定內部對象。在'$ digest'期間,Angular最有可能是一個適配器。 '_'按預期工作。 – 2014-09-11 11:00:10

+1

是啊,你可以使用任何你喜歡的屬性名稱,只要確保它不以$ – 2014-09-11 11:03:35

+0

開始嘗試$ scope.filter。$ myvar ...並更新其他更新後的當前....(我認爲提交你應該向angularjs團隊提交一個bug) – 2014-09-11 11:33:05

回答

2

這是因爲確實當角髒檢查,看看是否新的值大於最後一個值不同,它忽略了性能開始與「$」:

function equals(o1, o2) { 
    ... 
    for (key in o1) { 
     if (key.charAt(0) === '$' || isFunction(o1[key])) continue; 
     ... 

因此,它不會檢測到任何如果只有$scope.filter.$已更改,並且不會觸發觀察者回調,則更改。


這是一個明顯的設計決定的,因爲開始$特性被認爲是「角特定的」,但在觀看一個過濾器對象也似乎是合理的。
我會在GitHub上打開一個問題,看看核心團隊的一些事情。也許他們會決定爲一個$屬性做一個例外。