javascript - AngularJS嵌套指令被插入其假定的父元素之外

原文 标签 javascript angularjs angularjs-directive angularjs-ng-repeat

我在理解嵌套指令如何与AngularJS一起使用时遇到了麻烦。

var app = angular.module('plunker', []);

app.directive('myTable', function() {
    return {
        restrict: 'E',
        template: [
            '<table class="table table-query" ng-show="queries.length">',
                '<thead>',
                    '<tr>',
                        '<th class="query-name">Name</th>',
                        '<th class="query-status">Status</th>',
                    '</tr>',
                '</thead>',
                '<tbody>',
                    '<my-row ng-repeat="query in queries track by $index"',
                             'query="query">',
                    '</my-row>',
                '</tbody>',
            '</table>',
        ].join(''),
        scope: {
            queries: '='
        },
        controller: function() {
        },
        link: function(scope, element) {
        }
    };
});

app.directive('myRow', function() {
    return {
        restrict: 'E',
        template: [
            '<tr class="query query-status-{{query.status}}">',
                '<td>{{ query.name }}</td>',
                '<td>{{ query.status | uppercase }}</td>',
            '</tr>',
        ].join(''),
        scope: {
            query: '='
        },
        replace: true
    };
});


有人可以向我解释为什么tr不在tbody外面显示吗?
我只想做的就是将一个行指令嵌套在一个表指令中。我很确定我在某处缺少了ng-transclude,但是在哪里?我检查了angular-bootstrap,它们似乎在compile函数中发挥了一些作用。任何帮助深表感谢。

See this corresponding plunkr

最佳答案

问题与table标签有关。在angularjs渲染之前,浏览器会重新排列myTable模板的html。发生这种情况是因为html无效。

要解决此问题,可以将myRow指令的strict属性更改为'A'并使用如下指令:

...
'<tbody>',
    '<tr my-row ng-repeat="query in queries track by $index"',
        'query="query">',
    '</tr>',
'</tbody>',
...


这样,浏览器就可以看到有效的html,并且可以正常工作。

这是固定的plunkr

相关文章:

javascript - 不考虑表格排序器上的R符号

javascript - 清除另一个输入时清除输入类型的文本

html - 如何在Angular2 @Component中添加CSS以及更少的CSS?

html - 角度插值的跨度标签绑定问题

javascript - 如何使用Angular JS设置bootstrap navbar活动类?

javascript - 多次调用时,Angular服务将覆盖自身

javascript - 通过https使用不安全的websocket的JsSip客户端

javascript - 新手需要一些帮助

javascript - 使用回调函数和理解箭头符号的正确方法

javascript - Angular:如何通过指令中的表达式通过id获取元素?