监视包含特殊字符作为关键字的作用域对象
Watch a scope object contains special characters as key
我正在尝试为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对name
和phone
有效,但对$
无效。我没有问题,有人能帮我吗?
之所以会发生这种情况,是因为当angular进行脏检查以查看新值是否与上一个值不同时,它会忽略以"$"开头的属性:
function equals(o1, o2) {
...
for (key in o1) {
if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
...
因此,如果只有$scope.filter.$
发生了更改,它将不会检测到任何更改,并且不会触发观察程序回调。
这是一个明显的设计决策,因为从$
开始的属性被认为是"角度特定的",但观察过滤器对象似乎也是合理的
我会在GitHub上打开一个问题,看看核心团队对此有什么看法。也许他们会决定为$
属性破例。
相关文章:
- 向Angular作用域对象添加对象数组——TypeError
- 阻止控制器创建新的作用域对象
- 本地作用域对象
- 更新侧自调用函数中的外部作用域对象
- Javascript:替换函数的作用域对象
- 自定义指令中作用域对象内的嵌套对象
- 在作用域对象中定义但不可访问的属性
- 在绑定元素时从作用域对象添加格式
- AngularJs:将作用域对象的属性绑定到指令
- 正在与子指令作用域共享作用域对象
- 如何在显示之前格式化作用域对象中的数据
- 监视包含特殊字符作为关键字的作用域对象
- AngularJS指令没有设置第二级作用域对象
- AngularJS指令访问相同的作用域对象——避免覆盖
- 在Angular应用之外分配作用域对象
- Angularjs的ng-repeat带过滤器作用域对象
- 将作用域对象传递给可以监视和更新它的服务
- 如何将变量求值到局部作用域对象's属性,而不是JavaScript中的全局范围
- 如何在ng类指令中计算作用域对象
- AngularJS在调用rest式服务和作用域对象更新后选择值丢失