当用户多选择peoplepicker中的“作者”时,我会有一个数组。当他们选择一个人时,我想使用ng-repeat="item in filteredart =(filteredArticles |filter: AuthorArray ")
所以现在我可以使用$scope.AuthorArray="sridhar"
之类的单个值过滤数组。但我无法使用多个值$scope.AuthorArray="sridhar,Alan"
进行过滤。
帮帮我,我是新人:)
答案 0 :(得分:1)
我没有明确提出您的问题但据我了解,我认为您需要的是编写自定义过滤器。
在此示例中, matchMyCriteria 将数组中的所有项目与 AuthorArray 数组中的可用名称列表匹配。
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);
};
};
还有另一种解决方案,我认为它是好的解决方案。
在此示例中, myFilter 用于根据作者数组过滤项目数组。
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);
});
};
});
答案 1 :(得分:0)
实际上我已经使用了我知道的其他方法。但是我没有在ng-repeat
上使用过滤器,而是使用了一个按钮来触发过滤器。谢谢:))
`
$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()" />`