javascript – AngularJS:在除一个字段之外的所有字段的控制器中进行过滤
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – AngularJS:在除一个字段之外的所有字段的控制器中进行过滤,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2509字,纯文字阅读大概需要4分钟。
内容图文
![javascript – AngularJS:在除一个字段之外的所有字段的控制器中进行过滤](/upload/InfoBanner/zyjiaocheng/804/e76672a49fe14981984234e799bc76aa.jpg)
在我的angularjs应用程序中,我通过json获得了这样的数据示例:
{"id":"1a", "name": "aaa", "emails": {{"123@123.com"}, {"123@123.info"}}},
{"id":"2a", "name": "aba", "emails": {{"23@123.com"}, {"3@123.info"}}},
{"id":"3a", "name": "aab", "emails": {{"3@123.com"}, {"3@123.info"}}},
出于性能原因,我没有使用过滤器进行ng-repeat,但使用ng-show模式……
所以在控制器中我有这样的代码(搜索是我的输入值):
$scope.$watch('search', function(newVal, oldVal) {
$scope.filteredArray = $filter('filter')($scope.users, $scope.search, newVal);
});
但它甚至在id中搜索,例如我输入a并从id获取它,但我不需要字段ID …
那么如何仅在特定领域中使用过滤器进行搜索?
解决方法:
如果你关心性能,可能最好的选择就是不要使用$filter(‘filter’).假设您的数据是JSON,您可以执行以下操作:
function contains(src, value, except) {
var key;
switch(typeof src) {
case 'string':
case 'number':
case 'boolean':
return String(src).indexOf(value) > -1;
case 'object':
except = except || [];
for(key in src) {
if( src.hasOwnProperty(key) &&
except.indexOf(key) < 0 &&
contains(src[key], value, except)
) {
return true;
}
}
}
return false;
}
angular.module('app', []).
factory('appService', function() {
var data = [
{"id":"1a", "name": "aaa", "emails": ["123@123.com", "123@123.info"]},
{"id":"2a", "name": "aba", "emails": ["23@123.com", "3@123.info"]},
{"id":"3a", "name": "aab", "emails": ["3@123.com", "3@123.info", ["1@123.com", "2@123.info"]]}
];
return {
getFilteredData: function(filter, except) {
return filter ? data.filter(function(item) {
return contains(item, filter, except)
}) : data.slice(0);
}
}
}).
controller('appController', ['$scope', 'appService', function($scope, appService) {
$scope.search = '';
$scope.$watch('search', function(val) {
$scope.data = appService.getFilteredData(val, ['id']);
});
}]);
<!DOCTYPE html>
<html ng-app="app">
<head>
<script src="https://code.angularjs.org/1.4.0-beta.6/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-controller="appController">
<input ng-model="search" ng-model-options="{ updateOn: 'default blur', debounce: {'default': 500, 'blur': 0} }"/>
<ul>
<li ng-repeat="item in data">{{::item}}</li>
</ul>
</body>
</html>
上面的代码将在所有数据字段中进行深度搜索,并且不包括作为参数传递的字段列表的项目(在此示例中为[‘id’])
提示#1:在Angular中实现业务逻辑是一种不好的做法,它为此目的提供服务.
提示#2:如果要显示大型数据集,从性能的角度来看,debouncing过滤器更改将非常有用.
提示#3:如果您的数据集项是不可变的,您可以利用one-time binding(使用{{:: item}}语法)并通过减少Angular创建的手表数来加速您的应用.
内容总结
以上是互联网集市为您收集整理的javascript – AngularJS:在除一个字段之外的所有字段的控制器中进行过滤全部内容,希望文章能够帮你解决javascript – AngularJS:在除一个字段之外的所有字段的控制器中进行过滤所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。