Angular.js将过滤器传递给指令双向('=')属性
Angular.js pass filter to directive bi-directional ('=') attribute
我需要在页面的几个地方使用sublist
指令,它应该包含有时完整的fields
列表,但有时过滤。下面是我的简单方法:
<div ng-controller="MainCtrl">
<sublist fields="fields" /> <!-- This one is OK -->
<sublist fields="fields | filter: 'Rumba'" /> <!-- This one raises error -->
</div>
Javascript: angular.module('myApp', [])
.directive('sublist', function () {
return {
restrict: 'E',
scope: { fields: '=' },
template: '<div ng-repeat="f in fields">{{f}}</div>'
};
})
.controller('MainCtrl', function($scope) {
$scope.fields = ['Samba', 'Rumba', 'Cha cha cha'];
});
http://jsfiddle.net/GDfxd/14/当我尝试使用过滤器时,我得到这个错误:
Error: 10 $digest() iterations reached. Aborting!
这个问题有解决办法吗?
$digest iterations错误通常发生在监视器更改模型时。在错误情况下,隔离fields
绑定绑定到一个过滤器的结果。该绑定创建了一个监视程序。由于过滤器每次运行时都会从函数调用返回一个新对象,因此它会导致监视器不断触发,因为旧值永远不会与新值匹配(参见Google Groups中Igor的注释)。
一个好的修复方法是在这两种情况下绑定fields
,如:
<sublist fields="fields" /></sublist>
并在第二个case中添加另一个可选属性:
<sublist fields="fields" filter-by="'Rumba'" /></sublist>
然后调整你的指令:
return {
restrict: 'E',
scope: {
fields: '=',
filterBy: '='
},
template: '<div ng-repeat="f in fields | filter:filterBy">'+
'<small>here i am:</small> {{f}}</div>'
};
注意:记得关闭你的sublist
标签在你的小提琴。
这里是小提琴
校正后的小提琴
点击此处查看相关文章
在正文中,您需要有结束标记。虽然你仍然可以拥有像你这样的自包含标签。
<sublist fields="fields" filter="'Rumba'"/> <!-- Tested in chrome -->
相关文章:
- 使用angularjs内置过滤器过滤代码中的特定属性
- 如何对对象的多个属性使用角度过滤器
- 在ng-click中切换过滤器和属性
- 价格滑动过滤器-隐藏父属性元素
- PHP-AJAX复选框过滤器使用数据标记属性
- 通过过滤器数组设置对象数组的属性
- EmberJS:将输入值绑定到控制器属性,并在更改时运行过滤器
- 猫鼬属性过滤器
- 聚合物获取过滤器返回的对象的属性
- 如何在数组上使用 ng-repeat 和过滤器属性
- 有没有办法在 angularjs 过滤器中显示过滤数组的属性
- 使用带有角度属性分页过滤器的变量
- AngularJS:在使用基于选择的过滤器后,它赢得了'如果仅限于一个属性,则不清除
- 添加动态'过滤器'IE8的CSS属性不是't被正确分配
- 如何将事件处理程序与“;delegate()"使用属性过滤器
- Angular.js将过滤器传递给指令双向('=')属性
- mongoose.js:我如何从引用的子数组中删除一个属性,同时使用填充和使用其中一个子数组字段作为过滤器
- OpenLayers比较过滤器/对象属性
- 如何实现过滤过滤器通过搜索多个属性值在javascript
- 如何在magento 1.8中为可配置产品创建颜色和显示颜色属性过滤器