观察范围对象包含特殊字符作为键

时间:2014-09-11 10:55:10

标签: javascript angularjs angularjs-scope

我正在尝试为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,但不适用于$。我没有遇到问题,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

这是因为当angular执行脏检查以查看新值是否与最后一个值不同时,它会忽略以'$'开头的属性:

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

因此,如果仅$scope.filter.$发生了变化,它将不会检测到任何变化,并且它不会触发观察者回调。


这是一个明显的设计决策,因为以$开头的属性被视为“特定角度”,但观看过滤器对象似乎也是合理的。
我会在GitHub上打开一个问题,看看核心团队的内容是什么。也许他们会决定对$财产或其他东西进行例外处理。