【问题标题】:Adding table row underneath each table row generated by ngRepeat在 ngRepeat 生成的每个表格行下方添加表格行
【发布时间】:2014-06-25 03:07:00
【问题描述】:

我正在使用 ng-repeat 用数据填充表格。我就是这样设置的:

<tbody>
    <tr ng-repeat="client in clients | filter:x | filter:y |orderBy:predicate:!reverse | itemsPerPage: pageSize">
        <td><input id="option-{{client.id}}" type="checkbox" value=""></td>
        <td><a href="#/client/{{client.id}}">{{client.lastname}}</a></td>
        <td><a href="#/client/{{client.id}}">{{client.firstname}}</a></td>
        <td>{{client.status}}</td>
        <td>{{client.phone}}</td>
        <td><a href="mailto:{{client.email}}">{{client.email}}</a></td>
    </tr>
</tbody>

但我需要它在它在 ng-repeat 中创建的行下方添加一个表格行。这可能吗?

【问题讨论】:

    标签: javascript html angularjs html-table angularjs-ng-repeat


    【解决方案1】:

    你可以创建一个指令:

    app.directive('addRow', function ($parse, $compile) {
        return {
            restrict: 'A',
            link: function (scope, elem, attrs) {
                var template = attrs.addRow ? $parse(attrs.addRow)(scope) : '<tr><td>-</td></tr>';
                elem.after(template);
                $compile(elem.contents());
            }
        }
    });
    

    它在每个元素之后添加传递的行模板。如果模板未通过,则使用默认模板。它还编译你的模板,所以你可以在里面使用所有 angular 的东西(例如&lt;td&gt;{{variable}}&lt;/td&gt;)。

    使用示例:

    <table>
        <tbody>
            <tr ng-repeat="item in [1,2,3,4]" add-row="'<tr><td>my template</td></tr>'">
                <td>{{item}}</td>
            </tr>
        </tbody>
    </table>
    

    这里是 jsfiddle:http://jsfiddle.net/aartek/52b6e/

    【讨论】:

    • 这就是我要找的!谢谢!
    【解决方案2】:

    您总是可以手动向表中添加一行,例如:

    <tbody>
        <tr ng-repeat="client in clients | filter:x | filter:y |orderBy:predicate:!reverse | itemsPerPage: pageSize">
            <td><input id="option-{{client.id}}" type="checkbox" value=""></td>
            <td><a href="#/client/{{client.id}}">{{client.lastname}}</a></td>
            <td><a href="#/client/{{client.id}}">{{client.firstname}}</a></td>
            <td>{{client.status}}</td>
            <td>{{client.phone}}</td>
            <td><a href="mailto:{{client.email}}">{{client.email}}</a></td>
        </tr>
        <tr>
           <td>Footer 1</>
           <td>Footer 2</>
           <td>Footer 3</>
           <td>Footer 4</>
           <td>Footer 5</>
           <td>Footer 6</>
        </tr>
    </tbody>
    

    最好将它包含在 tfoot 标签中。

    或者如果你需要两行,你可以这样做:

    <tbody ng-repeat="item in items">
        <tr>
            <td>{{item.row_one_stuff}}</td>
            <td>{{item.more_row_one_stuff}}</td>
        </tr>
        <tr>
            <td>{{item.row_two_stuff}}</td>
            <td>{{item.more_row_two_stuff}}</td>
        </tr>
    </tbody>
    

    【讨论】:

    • 底部解决方案有效,但并不理想。它与“条纹”表类的东西混为一谈。但我会继续玩下去。
    • 是的,那是因为您的表格中有多个 tbody 标签,这完全可以,但是您必须更改负责条带化的 CSS。
    • 是的,我不确定这样做是否可行。添加了相当多的 HTML,但如果这是唯一的方法,那么我将开始使用 css 中的条带化。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-05-15
    • 2010-11-24
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2013-02-19
    相关资源
    最近更新 更多