代码之家  ›  专栏  ›  技术社区  ›  Slava

AngularJS ng repeat显示JSON数据中的组名

  •  0
  • Slava  · 技术社区  · 7 年前

    如何使用以下JSON数据显示存储、书签和收藏夹

    JSON数据(vm.bookmarks):

    [
        {
            "category": "stores",
            "title": "store1",
            "link": "http://www.store1.com",
        },
        {
            "category": "stores",
            "title": "store1",
            "link": "http://www.store2.com",
        },
        {
            "category": "bookmarks",
            "title": "bookmark1",
            "link": "http://www.bookmark1.com",
        },
        {
            "category": "bookmarks",
            "title": "bookmark2",
            "link": "http://www.bookmark2.com",
        },
        {
            "category": "bookmarks",
            "title": "bookmark3",
            "link": "http://www.bookmark3.com",
        },
        {
            "category": "favorites",
            "title": "favorites1",
            "link": "http://www.favorites1.com",
        },
        {
            "category": "favorites",
            "title": "favorites2",
            "link": "http://www.favorites2.com",
        }
    ]
    

    <div ng-repeat="item in vm.bookmarks|groupBy:'category'">
        <h2>{{item.category}}</h2>
    </div>
    

    我希望显示以下内容:

    • 书签
    • 收藏夹

    附笔

    我使用的过滤器没有注入任何东西,比如:

    <div ng-repeat="item in vm.bookmarks|filter:{category:'flyers'}" >
        <a href="{{item.link}}">{{item.title}}</a>
    </div>
    

    不确定是否需要注入角度过滤器以使用groupBy过滤器-为什么?

    1 回复  |  直到 7 年前
        1
  •  4
  •   Sajeetharan    7 年前

    您不需要使用 (key, value) ,还需要注入角度。作为依赖项筛选

    var MyApp = angular.module("MyApp",['angular.filter']);
    
    <ul class="nav nav-tabs" data-tabs="tabs" 
        ng-repeat="bookmark in vm.bookmarks|groupBy:'category'">
        <li><a href="@tabid" data-toggle="tab">{{bookmark.category}}</a></li>
    </ul>
    

    var app = angular.module("myApp", ['angular.filter']);
    app.controller("SimpleController", function($scope) {
      this.bookmarks = [
        {
            "category": "stores",
            "title": "store1",
            "link": "http://www.store1.com",
        },
        {
            "category": "stores",
            "title": "store1",
            "link": "http://www.store2.com",
        },
        {
            "category": "bookmarks",
            "title": "bookmark1",
            "link": "http://www.bookmark1.com",
        },
        {
            "category": "bookmarks",
            "title": "bookmark2",
            "link": "http://www.bookmark2.com",
        },
        {
            "category": "bookmarks",
            "title": "bookmark3",
            "link": "http://www.bookmark3.com",
        },
        {
            "category": "favorites",
            "title": "favorites1",
            "link": "http://www.favorites1.com",
        },
        {
            "category": "favorites",
            "title": "favorites2",
            "link": "http://www.favorites2.com",
        }
    ];
    var vm = this;
      
    });
    <!DOCTYPE html>
    <html>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-filter/0.5.16/angular-filter.js" > </script>
    <body ng-app="myApp">
        <div>
          <div data-ng-controller="SimpleController as vm">
          <ul class="nav nav-tabs" data-tabs="tabs" 
        ng-repeat="(key, value) in (vm.bookmarks|groupBy:'category')">
        <div ng-repeat="cat in value | unique:'category' ">
              <h1> {{cat.category}}</h1>
        </div>
      </ul>
            </div>
        </div>
    </body>
    
    </html>