AngularJS - 如果包含字符串,则删除ng重复项
AngularJS - Remove ng-repeat item if contains string(s)
我一直在清理我正在使用的外部 JSON URL 提要,并且我已经通过过滤器成功删除了不必要的特殊字符,如下所示:
angularJS.filter('removeChar', function(){
return function(text) {
text = text.replace(/'[[^']]+']/g, ''); // Characters inside Brackets
return text.replace(/';.*/, ''); // Characters after Colon
};
});
<span ng-bind-html-unsafe="item | removeChar">{{item}}</span>
但是,我现在要实现的 - 是通过我可以使用的过滤器删除 ng-repeat 项目,如果它包含特定字符串。
例如:
<div ng-repeat="item in items | removeItem">{{item['flowers']}}</div>
如果商品包含"红色"或"绿色"字样
<div>Blue Roses</div>
<div>Red Roses</div>
<div>Orand and Green Roses</div>
<div>Yellow Roses</div>
<div>Red and Green Roses</div>
只有这样才会从带有过滤器的 ng 重复显示:
<div>Blue Roses</div>
<div>Yellow Roses</div>
举例帮助将不胜感激。
谢谢!大鹏。
您可以将filter
与 ! 谓词一起使用,以否定搜索字符串:
div ng-repeat="item in items | filter:'!Red' | filter: '!Green'">{{item['flowers']}}</div>
因此,filter:'!Red'
删除任何包含字符串"Red"的内容。这些结果被传递到filter: '!Green'
这会删除包含字符串"Green"的任何结果。
以下是相关文档:http://docs.angularjs.org/api/ng.filter:filter
性能更新
我对过滤的成本感到好奇,所以我做了这个jsperf:http://jsperf.com/angular-ng-repeat-test1/2
我创建了 1,000 个字符串 ( items
),然后在我的系统上进行了 4 次测试,结果如下:
1) 使用 DI 281,599 操作/秒显示所有 1000
次 {{items}}
2) 使用ng-repeat
显示所有 1000 次(无过滤器):209,946 次操作/秒 慢 16%
<div ng-repeat="item in items"> {{item}}</div>
3) 使用一个滤波器ng-repeat
165,280 次操作/秒 慢 34%
<div ng-repeat="item in items | filter:filterString1"> {{item}}</div>
4) ng-repeat
带两个滤波器 165,553,操作/秒慢 38%
<div ng-repeat="item in items | filter:filterString1 | filter:filterString2"> {{item}}</div>
这当然不是一个科学的测试 - 我没有做任何控制,缓存等事情可能会影响结果。 但我认为相对表现很有趣。
您可以使用当前范围内可用的任何函数作为 filter
的参数。例如,你可以写这样的东西。
.HTML:
<div ng-app="" ng-controller="FooCtrl">
<ul>
<li ng-repeat="item in items | filter:myFilter">
{{item}}
</li>
</ul>
</div>
.JS:
function FooCtrl($scope) {
$scope.items = ["foo bar", "baz tux", "hoge hoge"];
$scope.myFilter = function(text) {
var wordsToFilter = ["foo", "hoge"];
for (var i = 0; i < wordsToFilter.length; i++) {
if (text.indexOf(wordsToFilter[i]) !== -1) {
return false;
}
}
return true;
};
}
这是一个工作的小提琴。http://jsfiddle.net/2tpb3/
- AngularJS ng选项在选择一个选项后删除了默认的空白值
- orderBy$filter在项目删除(拼接)后阻止ng重复列表更新
- 删除ng模型中的ng模型输入值
- ng单击从内部数组中删除项
- 使用ng重复或ng选项和删除空白选项选择长方体角度
- 使用 ng-click 在 angularJs 中添加和删除类
- 如何从 angularjs ng-route 中删除哈希 #
- ng隐藏不't在异步apiService调用后从类中删除
- AngularJS - 如果包含字符串,则删除ng重复项
- Agularjs ng-class:如果其他条件变为真,则删除类
- 隐藏或删除基于 ng 类的 ng 网格行
- 如果值为空,ng-model 将从对象中删除元素
- 使用角度从ng重复,简单的购物车实现中添加和删除项目
- ng-if 只删除我表中的内部 HTML
- 在 ng-repeat 中添加和删除 JSON 列表
- 如何使用ng类ng-click删除类
- 在 ng-if 函数上添加删除 HTML 标记链接
- NG-cloak指令被过早删除
- 如何使用 ng-class 在值计算结果为零时删除类
- AngularJS:ng-switch从输入字段中删除数据