A filter for angular where you pass a list of javascript objects and a string with the term to be searched, then this filter search all terms in all objects attributes.
There is a example.html with this filter working and a demo:
A filter for angular where you pass a list of javascript objects and a string with the term to be searched, then this filter search all terms in all objects attributes.
There is a example.html with this filter working and a demo:
| angular.module('Appfilters', []).filter('accentsFilter', [function () { | |
| return function (list, term) { | |
| var Normalize = function (string) { | |
| if(string==null || string==undefined) return ""; | |
| // apply toLowerCase() function | |
| string = string.toLowerCase(); | |
| // specified letters for replace | |
| var from = "àáäâèéëêěìíïîòóöôùúüûñçčřšýžďť"; | |
| var to = "aaaaeeeeeiiiioooouuuunccrsyzdt"; | |
| // replace each special letter | |
| for (var i = 0; i < from.length; i++) | |
| string = string.replace(new RegExp(from.charAt(i), "g"), to.charAt(i)); | |
| // return normalized string | |
| return string; | |
| }; | |
| //var termNormal = Normalize(term); | |
| var termNormal = Normalize(term); | |
| var terms = termNormal.split(" "); | |
| var found=false; | |
| var results = []; | |
| if (!angular.isUndefined(list) && !angular.isUndefined(term) && term.length > 0) { | |
| angular.forEach(list, function (listitem, listkey) { | |
| found=false; | |
| angular.forEach(listitem, function (itemvalue, itemkey) { | |
| if(found || typeof(itemvalue)!="string") return; | |
| var itemvalueNormal = Normalize(itemvalue); | |
| angular.forEach(terms, function (id) { | |
| if(found || id=="" || id==null) return; | |
| if (itemvalueNormal.indexOf(id) != -1){ | |
| results.push(listitem); | |
| found=true; | |
| return; | |
| } | |
| }); | |
| }); | |
| }); | |
| return results; | |
| } else { | |
| return list; | |
| } | |
| }; | |
| }]); |
| <html><head> | |
| <meta http-equiv="content-type" content="text/html; charset=UTF-8"> | |
| <meta name="robots" content="noindex, nofollow"> | |
| <meta name="googlebot" content="noindex, nofollow"> | |
| <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.min.js"></script><style type="text/css">@charset "UTF-8";[ng\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak{display:none;}ng\:form{display:block;}</style> | |
| <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script> | |
| <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min.js"></script> | |
| <link rel="stylesheet" type="text/css" href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.0/css/bootstrap-combined.min.css"> | |
| <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular-resource.js"></script> | |
| <script type="text/javascript" src="https://rawgithub.com/mariohmol/angular-filter-ignoreaccents/master/accentsFilter.js"></script> | |
| <title>AngularJS: Simple Accents Filter</title> | |
| <script type="text/javascript">//<![CDATA[ | |
| 'use strict'; | |
| var App = angular.module('clientApp', ['ngResource', 'Appfilters']); | |
| App.controller('ClientCtrl', ['$scope', function ($scope) { | |
| $scope.selectedCompany = []; | |
| $scope.clients = [{ | |
| name: 'Brett', | |
| designation: 'Software Engineer', | |
| company: { | |
| id: 1, | |
| name: 'Apple' | |
| } | |
| }, { | |
| name: 'Steven', | |
| designation: 'Database Administrator', | |
| company: { | |
| id: 3, | |
| name: 'Google' | |
| } | |
| }, { | |
| name: 'Jim', | |
| designation: 'Designer', | |
| company: { | |
| id: 2, | |
| name: 'Facebook' | |
| } | |
| }, { | |
| name: 'Michael', | |
| designation: 'Front-End Developer', | |
| company: { | |
| id: 1, | |
| name: 'Apple' | |
| } | |
| }, { | |
| name: 'Josh', | |
| designation: 'Network Engineer', | |
| company: { | |
| id: 3, | |
| name: 'Google' | |
| } | |
| }, { | |
| name: 'Ellie', | |
| designation: 'Internet Marketing Engineer', | |
| company: { | |
| id: 1, | |
| name: 'Apple' | |
| } | |
| }]; | |
| }]); | |
| //]]> | |
| </script> | |
| </head> | |
| <body data-ng-app="clientApp" class="ng-scope"> | |
| <div data-ng-controller="ClientCtrl"> | |
| <ul class="inline"> | |
| <li> | |
| <div class="alert alert-info"> | |
| <h4>Total Filtered Client: {{filtered.length}}</h4> | |
| <input type="text" ng-model="search" class="form-control" /> | |
| </div> | |
| </li> | |
| </ul> | |
| <hr/> | |
| <h3>Clients Table:</h3> | |
| <table class="table table-hover table-striped"> | |
| <thead> | |
| <tr> | |
| <th style="width:10%">#</th> | |
| <th style="width:20%">Name</th> | |
| <th style="width:40%">Designation</th> | |
| <th style="width:30%">Company</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr data-ng-repeat="client in filtered = (clients | accentsFilter:search)"> | |
| <td>{{$index + 1}}</td> | |
| <td><em>{{client.name}}</em> | |
| </td> | |
| <td>{{client.designation}}</td> | |
| <td>{{client.company.name}}</td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| <!-- <pre>{{selectedCompany|json}}</pre> | |
| <pre>{{companyList|json}}</pre> | |
| <pre>{{clients|json}}</pre> | |
| --> | |
| </div> | |
| </body></html> |