Angular 2:如何编写for循环,而不是foreach循环

eba*_*nin 56 angular2-template angular

使用Angular 2,我想多次复制模板中的一行.迭代一个对象很容易*ngFor="#object of objects".但是,我想运行一个简单的for循环,而不是foreach循环.像(伪代码)的东西:

{for i = 0; i < 5; i++}
  <li>Something</li>
{endfor}
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

Pan*_*kar 66

您可以动态生成一个您想要渲染的时间数组<li>Something</li>,然后ngFor对该集合执行操作.你也可以使用index当前元素.

标记

<ul>
   <li *ngFor="let item of createRange(5); let currentElementIndex=index+1">
      {{currentElementIndex}} Something
   </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

createRange(number){
  var items: number[] = [];
  for(var i = 1; i <= number; i++){
     items.push(i);
  }
  return items;
}
Run Code Online (Sandbox Code Playgroud)

在这里演示

在引擎盖下角度de-sugared这个*ngFor语法ng-template版本.

<ul>
    <ng-template ngFor let-item [ngForOf]="createRange(5)" let-currentElementIndex="(index + 1)" [ngForTrackBy]="trackByFn">
      {{currentElementIndex}} Something
    </ng-template>
</ul>
Run Code Online (Sandbox Code Playgroud)

  • 你提供的解决方案很好,我只是惊讶于这看起来多么愚蠢.我只想做一个简单的for循环,显示一个<p>标签`count:int`次,我的属性的数量是. (8认同)
  • createRange(number) { 返回新数组(number); } (3认同)

TGH*_*TGH 30

如果使用,您可以同时使用一个 index

<div *ngFor="let item of items; let myIndex = index>
  {{myIndex}}
</div>
Run Code Online (Sandbox Code Playgroud)

有了它,你可以获得两全其美.

  • 好的建议除了这个要求你已经有一个数组来循环或至少计数.如果您只需要循环n次,它就无法正常工作 (8认同)
  • 您在这里没有错过结束语吗? (2认同)
  • 抱歉,但 -1 没有提供问题的答案 - 在建议的解决方案中,迭代是在数组上,而不是表示循环的简单计数的数字。 (2认同)

小智 21

如果您将一个条目传递intArray构造函数,然后通过它进行迭代,则可以使用给定数量的条目实例化一个空数组ngFor.

在您的组件代码中:

export class ForLoop {
  fakeArray = new Array(12);
}
Run Code Online (Sandbox Code Playgroud)

在您的模板中:

<ul>
  <li *ngFor="let a of fakeArray; let index = index">Something {{ index }}</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

索引属性为您提供迭代编号.

实时版

  • 不错的解决方案,此外,我会将 `new Array(i);` 包装在管道中,以便可以重用 `&lt;li *ngFor="let a of 12 | fakeArray; let index = index"&gt;Something {{ index }}&lt;/li&gt;`,管道代码:`transform(i: number) { return new Array(i) };` (2认同)

小智 20

根据所需循环的长度,甚至可能是更"模板驱动"的解决方案:

<ul>
  <li *ngFor="let index of [0,1,2,3,4,5]">
    {{ index }}
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

  • 这是简单迭代器的赢家 (2认同)

Dee*_*rma 8

更好的方法是在组件中创建一个假数组:

在组件中:

fakeArray = new Array(12);
Run Code Online (Sandbox Code Playgroud)

在模板中:

<ng-container *ngFor = "let n of fakeArray">
     MyCONTENT
</ng-container>
Run Code Online (Sandbox Code Playgroud)

普朗克在这里