AngularJS: Custom filter
Return difference between two array's & call this filter from both controller and view template
by masudcsesust04
HTML
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css">
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
<div ng-app="myApp" ng-controller="AppCtrl">
<pre>Controller = {{groups1 | json}}</pre>
<pre>View = {{groups | differenceOfArray:assigned_groups | json}}</pre>
</div>
JavaScript
'use strict';
var app = angular.module('myApp', ['app.filters']);
app.controller('AppCtrl', function($scope, $filter) {
//$scope.hello = 'Hello';
$scope.groups = [
{"id": 9,"name": "PG","status": 1},
{"id": 4,"name": "pof","status": 1},
{"id": 8,"name": "TG","status": 1}
];
$scope.assigned_groups = [
{"id": 9,"name": "PG","status": 1},
{"id": 4,"name": "pof","status": 1}
];
$scope.groups1 = $filter('differenceOfArray')($scope.groups, $scope.assigned_groups);
});
var app_filters = angular.module('app.filters', []);
app_filters.filter('differenceOfArray',[function() {
return function(array1, array2) {
if(angular.isDefined(array1) && angular.isDefined(array2)){
for (var i=0; i<array2.length; i++) {
for (var j=0; j<array1.length; j++) {
if(angular.equals(array2[i], array1[j])) {
array1 = array1.slice(j+1);
break;
}
}
}
return array1;
}
}
}]);