我有一些工作正常的过滤器,到目前为止我只使用HTML模板中的管道。现在,我有一个用例,我想做同样的过滤,但是在指令的控制器中。
我知道我可以使用角度$filter
服务来使用
var filtered = $filter('myFilter')(unfiltered);
但是我的用例要求列表是就地过滤的,即我无法重新绑定变量(以免我将绑定松散到其他可能存在同一变量的地方)使用)。
我在the official docs找不到任何相关内容,但我不想放弃希望=)
答案 0 :(得分:2)
我认为您正在描述一种情况,即替换子范围中的整个数组(或对象),父范围或兄弟范围会丢失与该数组的连接。这是因为范围继承的性质。如果您有一个范围,则在该范围上放置一个数组,然后有两个子范围,并在其中一个范围内替换该数组,然后另一个子范围和父范围将“松开连接”。 有几种方法可以解决这个问题。这是一对夫妇:
而不是:$ scope.someArr
use: $scope.wrapper = {
someArr: SomeArr
}
然后:在子范围引用上:$ childScope.wrapper.someArr
示例代码:
//originalArr
var newArr// = new filtered array
var args = [0, originalArr.length].concat(newArr);
originalArr.splice.apply(this, args);
此代码仅供参考,尚未经过测试。我们的想法是splice处理原始数组,并且对所有作用域上的数组的引用保持不变。