AngularJS - 基于json构建动态表

Gui*_*rmo 27 javascript angularjs

鉴于这样的json:

{
   "name": "john"
   "colours": [{"id": 1, "name": "green"},{"id": 2, "name": "blue"}]
}
Run Code Online (Sandbox Code Playgroud)

和两个常规的html输入:

<input type="text" name="name" />
<input type="text" name="color" />
<input type="submit" value="submit" />
Run Code Online (Sandbox Code Playgroud)

我需要构建一个包含所有可能变体的表格,例如:

John green
John blue
Run Code Online (Sandbox Code Playgroud)

这意味着如果用户继续通过输入添加值,则新行将显示构建新变体,例如:

我还需要有可用的id来处理它,我需要当我使用输入添加新值时:例如:"Peter""Black",我需要动态自动填充id(颜色id),就像自动增量一样mysql,导致这样的事情:

{
  "colours": […...{"id": 3, "name": "black"}]
}
Run Code Online (Sandbox Code Playgroud)

那可能吗?使用棱角镜可以选择哪种方式?我仍在以jQuery的方式思考,我想以有角度的方式做到这一点.

我看了一下hg-​​repeat,然后使用它,但是我没有弄清楚如何提供预期的结果,我想到的唯一的事情是使用嵌套的ng-repeats,但它没有用.

非常感谢,提前,

吉列尔莫

Max*_*tin 56

只想与我目前使用的东西分享,以节省您的时间.

以下是硬编码头动态头的示例(如果不关心数据结构).在这两种情况下我写了一些简单的指令:customSort

customSort

.directive("customSort", function() {
    return {
        restrict: 'A',
        transclude: true,    
        scope: {
          order: '=',
          sort: '='
        },
        template : 
          ' <a ng-click="sort_by(order)" style="color: #555555;">'+
          '    <span ng-transclude></span>'+
          '    <i ng-class="selectedCls(order)"></i>'+
          '</a>',
        link: function(scope) {

        // change sorting order
        scope.sort_by = function(newSortingOrder) {       
            var sort = scope.sort;

            if (sort.sortingOrder == newSortingOrder){
                sort.reverse = !sort.reverse;
            }                    

            sort.sortingOrder = newSortingOrder;        
        };


        scope.selectedCls = function(column) {
            if(column == scope.sort.sortingOrder){
                return ('icon-chevron-' + ((scope.sort.reverse) ? 'down' : 'up'));
            }
            else{            
                return'icon-sort' 
            } 
        };      
      }// end link
    }
    });
Run Code Online (Sandbox Code Playgroud)

[带静态标题的第一个选项]

我用过单身 ng-repeat

这是一个很好的例子Fiddle (注意,没有jQuery库!)

在此输入图像描述

           <tbody>
                <tr ng-repeat="item in pagedItems[currentPage] | orderBy:sortingOrder:reverse">
                    <td>{{item.id}}</td>
                    <td>{{item.name}}</td>
                    <td>{{item.description}}</td>
                    <td>{{item.field3}}</td>
                    <td>{{item.field4}}</td>
                    <td>{{item.field5}}</td>
                </tr>
            </tbody>
Run Code Online (Sandbox Code Playgroud)

[动态标题的第二个选项]

演示2: Fiddle


HTML

<table class="table table-striped table-condensed table-hover">
            <thead>
                <tr>
                   <th ng-repeat="header in table_headers"  
                     class="{{header.name}}" custom-sort order="header.name" sort="sort"
                    >{{ header.name }}

                        </th> 
                  </tr>
            </thead>
            <tfoot>
                <td colspan="6">
                    <div class="pagination pull-right">
                        <ul>
                            <li ng-class="{disabled: currentPage == 0}">
                                <a href ng-click="prevPage()">« Prev</a>
                            </li>

                            <li ng-repeat="n in range(pagedItems.length, currentPage, currentPage + gap) "
                                ng-class="{active: n == currentPage}"
                            ng-click="setPage()">
                                <a href ng-bind="n + 1">1</a>
                            </li>

                            <li ng-class="{disabled: (currentPage) == pagedItems.length - 1}">
                                <a href ng-click="nextPage()">Next »</a>
                            </li>
                        </ul>
                    </div>
                </td>
            </tfoot>
            <pre>pagedItems.length: {{pagedItems.length|json}}</pre>
            <pre>currentPage: {{currentPage|json}}</pre>
            <pre>currentPage: {{sort|json}}</pre>
            <tbody>

                <tr ng-repeat="item in pagedItems[currentPage] | orderBy:sort.sortingOrder:sort.reverse">
                     <td ng-repeat="val in item" ng-bind-html-unsafe="item[table_headers[$index].name]"></td>
                </tr>
            </tbody>
        </table>
Run Code Online (Sandbox Code Playgroud)

作为旁注:

ng-bind-html-unsafe已过时,所以就用它仅适用于演示(第二示例).您欢迎编辑.


Ale*_*raf 11

以下是带有angularJS的动态列和行的示例:http://plnkr.co/edit/0fsRUp?p = preview