使用ngRepeat指令循环时生成多个标记

时间:2017-06-01 00:47:33

标签: javascript angularjs

我知道ngRepeatforEach,但我需要的或多或少是这两者的混合体。我的意思是:

我在$scope中有一个列列表。我可以用

<th ng-repeat="col in columns">{{ col.label }}</th>

那将呈现

<th>Col A</th>
<th>Col B</th>
<th>Col C</th>

$scope我有一个变量(mode)。当此变量的值为admin时,将使用ng-show显示一些与管理员相关的html标记。此外,当此变量为admin时,我希望我的列可以像这样呈现

<th>config</th>
<th>Col A</th>
<th>config</th>
<th>Col B</th>
<th>config</th>
<th>Col C</th>

有没有办法以某种方式使用ng-repeat,以便我可以同时渲染配置和标签列?也许像是

<repeat for="col in columns">
  <th ng-show="mode == 'admin'">config</th>
  <th>{{ col.label }}</th>
</repeat>

或者,我是唯一一个创建新列表的选项,该列表已经包含管理列,并且每次更改forEach时都会重新生成(mode)?对此最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

最好使用返回列的函数

$scope.getColumns = function() {
  if (mode != 'admin') {
    return columns;
  } else {
    var c = new Array(columns.length * 2);
    for (var i=0; i< c.length; i++) {
      c[i] = i % 2 == 0 ? 'config' : columns[parseInt(i/2)];
    }
    return c;
  }
}

模板

<th ng-repeat="column in getColumns()" ng-bind="column"></th>

答案 1 :(得分:1)

您可以尝试使用ng-repeat-start和ng-repeat-end。像这样:

  <div ng-repeat-start="foo in foos">{{ foo.something }}</div>
    Anything in here
   <div><div ng-repeat-end="">This code will repeat and should work</div>
  </div>

有关详细信息,请参阅https://docs.angularjs.org/api/ng/directive/ngRepeat