Ng-repeat-start в angular2 - повторение нескольких элементов с использованием NgFor

Мне нужно повторить несколько li -элементов в списке в Angular2 для каждого элемента. В angular 1.x я использовал ng-repeat-start и ng-repeat-end для этого. Я не могу найти правильный способ сделать это в angular 2. Есть несколько старых сообщений в блоге об этом, но их предложения не работают в новейшей версии beta Angular2.

Все элементы <li> должны повторяться для каждой категории: (который я обычно делал бы с атрибутом *ngFor="#category of categories" - но я не могу найти, куда его поместить...

Справка

<ul class="dropdown-menu" role="menu">
    <li class="dropdown-header">
        {{ category.title }}
    </li>
    <li>
        <a href="{{ '/music/' + tag.keyword }}" *ngFor="#tag of category.tags" [hidden]="tag.deleted === 1">{{ tag.tag_title_da }}</a>
    </li>
    <li class="divider"></li>

    <li class="dropdown-header">Alle musikstykker</li>
    <li><a href="/music/all">Alle musikstykker</a></li>
</ul>

Ответы

Ответ 1

Если вы хотите повторить содержимое, используйте тег template и удалите префикс * на ngFor.

Согласно Виктор Савкин на ngFor и templates:

Angular обрабатывает элементы шаблона особым образом. Они используются для создавать представления, куски DOM, которые вы можете динамически манипулировать. * синтаксис - это ярлык, который позволяет избежать написания всего элемент.

<ul class="dropdown-menu" role="menu">
   <template ngFor #category [ngForOf]="categories">
    <li class="dropdown-header">
        {{ category.title }}
    </li>
    <li>
        <a href="{{ '/music/' + tag.keyword }}" *ngFor="#tag of category.tags" [hidden]="tag.deleted === 1">{{ tag.tag_title_da }}</a>
    </li>
    <li class="divider"></li>

    <li class="dropdown-header">Alle musikstykker</li>
    <li><a href="/music/all">Alle musikstykker</a></li>
    </template>
</ul>

Обновление angular ^ 2.0.0

Вы можете использовать ng-container и просто изменить #var на let var.

<ng-container> ведет себя так же, как и <template>, но позволяет использовать более распространенный синтаксис.

<ul class="dropdown-menu" role="menu">
  <ng-container *ngFor="let category of categories">
    <li class="dropdown-header">
      {{ category.title }}
    </li>
    <li>
      <a href="{{ '/music/' + tag.keyword }}" *ngFor="let tag of category.tags" [hidden]="tag.deleted === 1">{{ tag.tag_title_da }}</a>
    </li>
    <li class="divider"></li>

    <li class="dropdown-header">Alle musikstykker</li>
    <li><a href="/music/all">Alle musikstykker</a></li>
  </ng-container>
</ul>

Ответ 2

В новых версиях он работает следующим образом:

<ul class="dropdown-menu" role="menu">
  <template ngFor let-category [ngForOf]="categories">
    <li class="dropdown-header">
        {{ category.title }}
    </li>
    <li>
        <a href="{{ '/music/' + tag.keyword }}" *ngFor="#tag of category.tags" [hidden]="tag.deleted === 1">{{ tag.tag_title_da }}</a>
    </li>
    <li class="divider"></li>

    <li class="dropdown-header">Alle musikstykker</li>
    <li><a href="/music/all">Alle musikstykker</a></li>
  </template>
</ul>

- > let-category вместо #category

Ответ 3

Спасибо за ваши усилия, pixelbits, однако ответ был другим.

Чтение о звездочке в Синтаксис шаблона в руководствах Angular.io дает вам ключ.

Это разрешило это:

<template ngFor #category [ngForOf]="categories">
    <li class="dropdown-header">
        {{ category.title }}
    </li>
    <li>
        <a href="{{ '/music/' + tag.keyword }}" *ngFor="#tag of category.tags" [hidden]="tag.deleted === 1">{{ tag.tag_title_da }}</a>
    </li>
    <li class="divider"></li>
</template>