首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于父ng-重复筛选ng-重复

基于父ng-重复筛选ng-重复
EN

Stack Overflow用户
提问于 2016-06-29 14:24:33
回答 2查看 626关注 0票数 1

挠了我的头两个小时。也许我累了,或者我不明白我在做什么。总之,我有很多博客。看起来是这样的:

代码语言:javascript
复制
[
  {
    'title': 'first post', 
    'tags': [
      { 'name': 'Tag 1', 'slug': 'tag-1' }
    ]
  },
  {
    'title': 'second post', 
    'tags': [
      { 'name': 'Tag 1', 'slug': 'tag-1' },
      { 'name': 'Tag 3', 'slug': 'tag-3' }
    ]
  },
  {
    'title': 'third post', 
    'tags': [
      { 'name': 'Tag 2', 'slug': 'tag-2' }
    ]
  }
]

还有一个数组,里面有这样的标签。

代码语言:javascript
复制
[
  {'title': 'Tag 1', 'slug':'tag-1'},
  {'title': 'Tag 2', 'slug':'tag-2'},
  {'title': 'Tag 3', 'slug':'tag-3'},
  {'title': 'Tag 4', 'slug':'tag-4'}
]

我正在做一个正常的角度-重复这样来显示我所有的博客标签:

代码语言:javascript
复制
<ul>
    <li ng-repeat="tag in blog.tags">
        <h3>{{ tag.title }}</h3>
    </li>
</ul>

现在,我想添加一个嵌套的中继器,它只显示包含当前标记的变量blog.posts中的blogpost。就像这样:

代码语言:javascript
复制
<ul ng-controller="BlogComponent as blog">
  <li ng-repeat="tag in blog.tags">
    <h3>{{ tag.title }}</h3>
    <ul>
      <li ng-repeat="post in blog.posts | filter: tag.slug IN post.tags">
        <span>{{ post.title }}</span>
      </li>
    </ul>
  </li>
</ul>

但我似乎没办法让它起作用。我觉得应该很简单。因为在我看来,这是一个非常简单的任务。根据字符串和数组筛选出不需要的结果。

需要/扩展输出:

代码语言:javascript
复制
<ul>
  <li>
    <h3>Tag 1</h3>
    <ul>
      <li>first post</li>
      <li>second post</li>
    </ul>
  </li>
  <li>
    <h3>Tag 2</h3>
    <ul>
      <li>third post</li>
    </ul>
  </li>
  <li>
    <h3>Tag 3</h3>
    <ul>
      <li>second post</li>
    </ul>
  </li>
</ul>
EN

回答 2

Stack Overflow用户

发布于 2016-06-29 14:51:11

您可以使用自定义筛选器,而不是使用" filter :表达式“。您所能做的是创建一个过滤器,它以标记和posts作为参数,并使用筛选的项返回数组。

代码语言:javascript
复制
myApp.filter('myFilter', function () {
    return function (posts, tag) {
        var newPosts = [];
          for (var i = 0; i < posts.length; i++) 
            for (var j = 0; j < post.tags.length; j++) 
             if (posts[i].tags[j].slug === tag.slug)
                newPosts.push(posts[i]);

        return newPosts;
    }
});

然后

代码语言:javascript
复制
  <li ng-repeat="post in blog.posts | myFilter: tag">
    <span>{{ post.title }}</span>
  </li>
票数 1
EN

Stack Overflow用户

发布于 2016-06-29 16:27:24

使用内置功能,您可以这样做:

代码语言:javascript
复制
<ul ng-controller="BlogComponent as blog">
  <li ng-repeat="tag in blog.tags">
    <h3>{{ tag.title }}</h3>
    <ul>
      <li ng-repeat="post in blog.posts | filter: {tags: {slug: tag.slug}}">
        <span>{{ post.title }}</span>
      </li>
    </ul>
  </li>
</ul>

看到它在这里工作:https://plnkr.co/edit/pQZse1hUnnzyfneIlpMu?p=preview

过滤器的文档如下:https://docs.angularjs.org/api/ng/filter/filter

或者,如果您想隐藏标记4,因为它没有匹配的帖子,您可以这样做:

代码语言:javascript
复制
<div ng-controller="BlogComponent as blog">
  <div ng-repeat="tag in blog.tags">
    <div ng-repeat="post in blog.posts | filter: {tags: {slug: tag.slug}}">
      <h3 ng-if="$first">{{ tag.title }}</h3>
      <li>{{ post.title }}</li>
    </div>
  </div>
</div>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38102516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档