AngularJS等效于Angular ng-container

mve*_*and 17 angularjs angularjs-directive angular

这是一个AngularJS等效的Angular ng-container

或者我应该用transclude指令自己创建一些东西?


用例示例:

  1. 具有隔行对,三元组等的表格:

    <table><tr>
      <ng-container ng-repeat="item in items">
        <td>{{ item.a }}</td>
        <td>{{ item.b }}</td>
      </ng-container>
    </tr></table>
    
    Run Code Online (Sandbox Code Playgroud)

    DOM树中不应该有额外的级别,而是<td>s应该是<tr>元素的直接子级.

  2. HTML列表存在类似的问题,尤其是定义列表,其中<dt>/ <dd>元素应该是直接子元素,<dl>而它们通常成对存在.

  3. 表格式的数据排列display:grid:

    <div style="display: grid; grid-template-columns: auto auto">
        <ng-container ng-repeat="item in items">
            <div>{{ item.a }}</div>
            <div>{{ item.b }}</div>
        </ng-container>
    </div>
    
    Run Code Online (Sandbox Code Playgroud)

    这种情况甚至更成问题,因为DOM树中存在的容器元素导致整个布局中断,因为它被渲染为单元而不是其子元素.

小智 14

在您提到的情况下,您可以分别使用ng-repeat-startng-repeat-end配对:

  1. 具有隔行对,三元组等的表格:

    <table><tr>
      <td ng-repeat-start="item in items">{{ item.a }}</td>
      <td ng-repeat-end>{{ item.b }}</td>
    </tr></table>
    
    Run Code Online (Sandbox Code Playgroud)
  2. HTML列表:

    <dl>
      <dt ng-repeat-start="item in items">{{ item.term }}</dt>
      <dd ng-repeat-end>{{ item.definition }}</dd>
    </dl>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 具有显示的数据表格式排列:网格:

    <div style="display: grid; grid-template-columns: auto auto">
      <div ng-repeat-start="item in items">{{ item.a }}</div>
      <div>{{ item.b }}</div>
      <div ng-repeat-end>{{ item.c }}</div>
    </div>
    
    Run Code Online (Sandbox Code Playgroud)

您可以在API参考中阅读此内容:https://docs.angularjs.org/api/ng/directive/ngRepeat#special-repeat-start-and-end-points


ach*_*ach 5

不幸的是,在 AngularJS 中ng-repeatng-if等必须用于将出现在标记中的 HTML 元素。根据具体的用例,您可以尝试将元素指令与replace: true.

  • 您能否提供一些代码示例来说明由于 HTML 语义而禁止引入额外 DOM 树级别的用例,例如向某些“display:grid”元素添加表格单元格或子节点的情况? (3认同)

Ram*_*ran 1

您也可以在两者ng-container中使用相同的内容。但还有一个额外的选择是 充当AngularjsAngular-2angular-2ng-templateng-container

  • 我在 AngularJS 1.6.3 中使用 ng-container,我看到 ng-container 元素包含在浏览器的 DOM 中。另外,Webstorm 说“未知的 HTML 标签 ng-container”。所以它在我的项目中没有按预期工作。 (12认同)