2016-03-28 10 views
0

ich ein Array habe, wenn der Benutzer Multi wählt ‚Autor‘ aus peoplepicker.when sie wählen ein Volk, ich will also das Array mit dem entsprechenden Displaytext filtern mit ng-repeat="item in filteredart =(filteredArticles |filter: AuthorArray ")Suche Filtration in AngularJS mit Array Wert

Jetzt Ich kann das Array mit einem einzelnen Wert wie $scope.AuthorArray="sridhar" filtern, aber ich kann nicht mit mehreren Werten $scope.AuthorArray="sridhar,Alan" filtern.

Helfen Sie mir, ich bin neu :)

+0

Es ist nicht klar, was Sie zu filtern versuchen. Wie sieht das Wertefeld aus, das Sie filtern möchten? Bitte geben Sie mehr Code/Kontext für Ihre Frage an. – ryanyuyu

Antwort

0

Tatsächlich habe ich verwendet, um andere Verfahren, die I know.But anstelle Filter der Verwendung auf ng-repeat I eine Taste verwendet, um die Filter zu triggern. Thanks :)

`

$scope.authorChange = function() { 
      var ppick = SPClientPeoplePicker.SPClientPeoplePickerDict.peoplePickerDiv_TopSpan; 
      var filteredArticlestemp = []; 
      $scope.authorarray= getUsers(ppick); 
      //$scope.authorarray = $scope.authorarray.join(); 
      for (var j = 0; j < $scope.authorarray.length; j++) { 
       for (var i = 0; i < $scope.filteredArticles.length; i++) { 
        if ($scope.filteredArticles[i].Author == $scope.authorarray[j]) { 
         filteredArticlestemp.push($scope.filteredArticles[i]); 
        } 
       } 
      } 
      $scope.filteredArticles = filteredArticlestemp; 
     } 
     function getUsers(peoplePicker) { 

      // Get information about all users. 
      var users = peoplePicker.GetAllUserInfo(); 
      var userInfo = []; 
      if (users.length > 0) { 
       for (var i = 0; i < users.length; i++) { 
        var user = users[i]; 
        userInfo.push(user.DisplayText); 

       } 
      } 


      return userInfo; 
     } 

`

`<div id="peoplePickerDiv" ng-model="authorsearch"></div> 
<input type="button" value="Refine" ng-click="authorChange()" />` 
1

Ich bin nicht klar Ihre Frage bekommen, aber soweit ich es verstanden, glaube ich, was Sie brauchen einen benutzerdefinierten Filter zu schreiben ist.

In diesem Beispiel entspricht matchMyCriteria alle Elemente im Array mit der Liste der verfügbaren Namen in AuthorArray Array.

HTML:

<div ng-repeat="item in items | filter: matchMyCriteria()"> 
{{ item }} 
</div> 

JS:

$scope.items = [{title: "abc", author: "Alan", .....}, ......]; 
$scope.AuthorArray = ["sridhar", "Alan"]; 
$scope.matchMyCriteria = function() { 
    return function(item) { 
    return ($scope.AuthorArray.indexOf(item.author) > -1); 
    }; 
}; 

Es gibt eine andere Lösung für sie ist, und ich nehme an, es das gute zu sein.

In diesem Beispiel wird myFilter verwendet, um das Array von Elementen auf der Grundlage eines Arrays von Autoren zu filtern.

HTML:

<div ng-repeat="item in items | myFilter: AuthorArray"> 
    {{item}} 
</div> 

JS:

app.filter('myFilter', function() { 
    return function(list, criteria) { 
    return list.filter(function(l) { 
     return (criteria.indexOf(l.author) > -1); 
    }); 
    }; 
});