使用 角度$filter服务就地筛选列表
Filter a list in-place with the angular $filter service
我有几个过滤器工作正常,到目前为止,我只通过HTML模板中的管道使用。现在,我有一个用例,我想在指令的控制器中进行相同类型的过滤。
我知道我可以使用角度$filter
服务来访问过滤器,使用
var filtered = $filter('myFilter')(unfiltered);
但是我的用例要求就地过滤列表,即我无法重新绑定变量(以免我将绑定松散到可能使用相同变量的其他地方)。
我在官方文档中找不到任何关于此的内容,但我还不想放弃希望=)
我认为您正在描述一种情况,即替换子作用域、父级或同级作用域中的整个数组(或对象)会丢失与数组的连接。发生这种情况是由于范围继承的性质。如果你有一个作用域,你把一个数组放在该作用域上,然后有两个子作用域,并替换其中一个子作用域上的数组,那么另一个子作用域和父作用域将"失去连接"。有几种方法可以解决这个问题。这里有一对:
- 使用
- 父作用域上的对象包装数组。然后通过对象引用子作用域中的数组。如果这样做,则可以更改整个数组,并且所有控制器仍将引用同一数组。
而不是:$scope.someArr
use: $scope.wrapper = {
someArr: SomeArr
}
then:在子作用域引用上:$childScope.wrapper.someArr
- 您可以修改原始数组。过滤到一个新数组中,然后将参数连接到一个数组中,并应用拼接:
示例代码:
//originalArr
var newArr// = new filtered array
var args = [0, originalArr.length].concat(newArr);
originalArr.splice.apply(this, args);
此代码仅是概念性的,尚未经过测试。这个想法是拼接处理原始数组,并且所有作用域上对数组的引用保持不变。
相关文章:
- 使用下拉列表筛选列表(ul>li)
- React中的筛选列表
- 在本地存储中选中复选框,但在加载时也要筛选列表
- 控制器中的筛选列表没有'不起作用
- 我们可以将控制器中的JSON数据(MM/DD/YYYY格式)与今天的's日期,并在数组中显示筛选列表
- 使用 角度$filter服务就地筛选列表
- 在子对象中显示筛选列表的挖空 js.访问要过滤的父对象列表
- 在变量中存储后筛选列表项
- 使用单选按钮筛选列表
- 基于从下拉列表中选择的值的筛选列表不起作用
- SAPUI5:如何在两个视图之间筛选列表
- Jquery按子项筛选列表
- ember.js如何为视图显示不同的筛选列表?复杂的设置
- 如何筛选列表中的项目而不破坏其他筛选器
- 筛选包含多个单词的筛选列表
- JQuery:筛选列表元素
- 使用自动完成功能中的选择来筛选列表
- 如何根据文本框值筛选列表框的内容
- 如何使用jQuery按多个条件正确筛选列表
- 基于用户筛选列表项目's在javascript中的搜索词