Better Search using angular filter
1. Spaces ( ) removed 2. Commas (,) removed 3. Token / Word based search - Mayank Dixit
by Mayank Dixit
HTML
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.8/angular.min.js"></script>
<div ng-app="app">
<div ng-controller="ParentCtrl">
Search: <input ng-model="searchText" id='gresult'/><br/>
<ul><li ng-repeat="list in glist | searchAllClouds: modifySearchText() track by $index">{{list.keyword}}</li></ul>
</div>
</div>
JavaScript
angular.module('myApp', [])
.controller('ParentCtrl', function($scope) {
function removeSpaces(x){
var y='';
if (x) y = x.replace(/ /g,' ').replace(/,/g, '');
if(y == x) return y.trim();
else return removeSpaces(y)
}
$scope.glist=[{keyword:'mayank, simple', id:1},{keyword:'tripple', id:2},{keyword:'factor', id:3},{keyword:'jeevan', id:4},{keyword:'whaever', id:5},{keyword:'simple', id:6},{keyword:'mrityu', id:7}];
$scope.modifySearchText = function(){
console.log($scope.searchText, "this is searchText")
if($scope.searchText){
return removeSpaces($scope.searchText).split(' ')
}
return ""
}
}).
filter('searchAllClouds', function(){
return function(searchIn, input){
var res=[];
if(input == undefined) input=[];
console.log('search in:', searchIn, '\nsearchfor: ', input)
for(var i=0; i<searchIn.length; i++){
for(var j=0; j<input.length ; j++){
if(searchIn[i].keyword.indexOf(input[j].trim()) >= 0)
res.push(searchIn[i])
}
}
res = res.filter(function(el,i,a) {return (i==a.indexOf(el));})
console.log('filtered: ', res);
return res
}
});