监视包含特殊字符作为关键字的作用域对象

Watch a scope object contains special characters as key

本文关键字:作用域 对象 关键字 包含 特殊字符 监视      更新时间:2023-09-26

我正在尝试为AngularJS ng网格实现一个过滤器。

AngularJS过滤器示例

发布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);
}

问题

Watch对namephone有效,但对$无效。我没有问题,有人能帮我吗?

之所以会发生这种情况,是因为当angular进行脏检查以查看新值是否与上一个值不同时,它会忽略以"$"开头的属性:

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

因此,如果只有$scope.filter.$发生了更改,它将不会检测到任何更改,并且不会触发观察程序回调。


这是一个明显的设计决策,因为从$开始的属性被认为是"角度特定的",但观察过滤器对象似乎也是合理的
我会在GitHub上打开一个问题,看看核心团队对此有什么看法。也许他们会决定为$属性破例。