2017-01-31 2 views
0

У меня есть настраиваемый фильтр (arrayDiff), который принимает аргумент. Фильтр вызывается в ng-repeat, но независимо от того, какой аргумент я вставляю, фильтр всегда принимает весь массив в качестве аргумента.Угловой пользовательский фильтр игнорирует аргумент

angular.module('demo', []) 
 
.controller('Ctrl', function ($scope, $filter) { 
 
    $scope.selectedPriority = [ ]; 
 
    $scope.data = []; 
 
    $scope.priorities = [1, 2, 3]; 
 
    $scope.objects = [{"date": "2017-01-08", "duration": 120}, {"date": "2017-01-08", "duration": 120}]; 
 

 
}) 
 

 
.filter('arrayDiff', function() { 
 
    return function(diff) { 
 
     console.log(diff); //is always [1,2,3] 
 
     return diff; 
 

 
    }; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<!DOCTYPE html> 
 
<html ng-app="demo" ng-controller="Ctrl"> 
 

 
    <head> 
 
    <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/angular_material/1.1.0-rc2/angular-material.min.css"> 
 
    <link rel="stylesheet" href="style.css"> 
 
    <script src="script.js"></script> 
 
    </head> 
 

 
    <body> 
 

 
    <!-- Angular Material Library --> 
 
    <script src="http://ajax.googleapis.com/ajax/libs/angular_material/1.1.0-rc2/angular-material.min.js"></script> 
 
    <div ng-repeat="object in objects"> 
 
    <input-container> 
 
     <select ng-model="selectedPriority[$index].priority" ng-change="selectedPriority[$index].objectId = object.id" > 
 
     <option ng-value="priority" ng-repeat="priority in priorities | arrayDiff:'hello'">{{ priority }}</option> //Filter call 
 
     </select> 
 
    </input-container> 
 
    </div> 
 
    </body> 
 

 
</html>

ответ

2

Вам необходимо пройти diff в качестве второго параметра, как первый параметр всегда сам массив:

.filter('arrayDiff', function() { 
    return function(array, diff) { 
     console.log(diff); 
     return diff; 

    }; 
}); 
Смежные вопросы