2014-09-11 59 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上打开一个问题,看看核心团队的一些事情。也许他们会决定为一个$属性做一个例外。