我正在尝试为AngularJS ng-grid实现过滤器。
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);
}
问题
观看适用于name
和phone
,但不适用于$
。我没有遇到问题,有人可以帮助我吗?
答案 0 :(得分:2)
这是因为当angular执行脏检查以查看新值是否与最后一个值不同时,它会忽略以'$'开头的属性:
function equals(o1, o2) {
...
for (key in o1) {
if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
...
因此,如果仅$scope.filter.$
发生了变化,它将不会检测到任何变化,并且它不会触发观察者回调。
这是一个明显的设计决策,因为以$
开头的属性被视为“特定角度”,但观看过滤器对象似乎也是合理的。
我会在GitHub上打开一个问题,看看核心团队的内容是什么。也许他们会决定对$
财产或其他东西进行例外处理。