所以我有一份新闻文章列表,我需要对它们进行过滤,但服务器端不是客户端。
我过滤的方式是使用一个下拉列表,用户点击该列表来过滤文章,如下所示:
<ul>
<li ng-repeat="category in categories">
<span href="" ng-click="getFilteredArticles(category.id)">{{category.title}}</span>
</li>
</ul>
并且文章通过ng-repeat填充,如此
<ul infinite-scroll="addPosts()" infinite-scroll-distance="0" infinite-scroll-disabled="stopScrolling" class="c-news">
<li ng-repeat="post in posts" class="c-news__item" ng-click="selectPost(post)">
<!-- Omitted some code for the sake of brevity -->
</li>
</ul>
getFilteredArticles方法如下所示
$scope.getFilteredArticles = function (categoryId) {
var posts = $scope.posts;
posts.forEach( (object) => {
if ( object[Categories.Id] === categoryId ) {
$scope.filteredArticles.push(object);
}
});
console.log($scope.filteredArticles);
}
我正在浏览的典型JSON对象看起来像这样
{
"Title":"Test Title",
"Summary":"",
"PublishedDate":"2016-10-17T09:42:00",
"Author":{
"Id":"480586a5-2169-e611-9426-00155d502902",
"FirstName":"TestFirst",
"LastName":"TestSecond",
"Email":"test@test.com"
},
"Id":99,
"StatusName":"Published",
"Status":2,
"Categories":[
{
"Id":1,
"Name":"Category 1",
"ArticleCount":31,
"UnpublishedArticleCount":1
},
{
"Id":2,
"Name":"Category 2",
"ArticleCount":19,
"UnpublishedArticleCount":0
}
],
"AttachmentCount":0,
"FilesAwaitingCheckIn":0
}
我想要发生的是当用户点击其中一个过滤器选项时,列表会过滤到单击的选项。我有这么远,但后来我得到一个ReferenceError:没有定义类别。
我根据另一个堆栈问题找到了我的getFilteredArticles()代码,可以找到here。
我知道能够只过滤ng-repeat但是我的经理不想走那条路,而是宁愿过滤服务器端,因为我们可能会有大量的帖子。
有什么想法吗?
修改 这是$scope.posts array
里面的内容答案 0 :(得分:1)
由于Categories
是array
,您需要遍历该数组才能获得Id
你的循环应该与此类似
$scope.getFilteredArticles = function (categoryId) {
for(var i=0;i<$scope.posts.length;i++)
{
for(var j=0;j<$scope.posts[i]["Categories"].length;j++)
{
if($scope.posts[i]["Categories"][j]["Id"] == categoryId)
$scope.filteredArticles.push($scope.posts[i])
}
}
console.log(JSON.stringify($scope.filteredArticles));
};