Ng-repeat-start dans angular2 - aka répéter plusieurs éléments en utilisant NgFor

J'ai besoin de répéter plusieurs li-éléments dans une liste Angular2 pour chaque élément. Dans angulaire 1.x j'ai utilisé ng-repeat-start et ng-repeat-end pour ce. Je ne trouve pas la bonne façon de le faire dans Angular 2. Il y a quelques anciens articles de blog à ce sujet, mais leurs suggestions ne fonctionnent pas dans la nouvelle version bêta D'Angular2.

Tous les <li>-éléments doivent être répétés pour chaque catégorie: (ce que je ferais normalement avec l'attribut *ngFor="#category of categories" - mais je ne trouve pas où le mettre...

Aide?

<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>
21
demandé sur Mark Rajcok 2015-12-30 19:22:36

4 réponses

Si vous voulez répéter le contenu, utilisez la balise template et supprimez le préfixe * sur ngFor.

Selon Victor Savkin sur ngFor et templates:

Angular traite les éléments du modèle d'une manière spéciale. Ils sont utilisés pour créez des vues, des morceaux de DOM que vous pouvez manipuler dynamiquement. Le * la syntaxe est un raccourci qui vous permet d'éviter d'écrire le tout élément.

<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>

Mise à Jour angulaire ^2.0.0

, Vous pouvez utiliser ng-container et changez simplement #var en let var.

<ng-container> se comporte de la même manière que le <template> mais permet d'utiliser la syntaxe la plus courante.

<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>
44
répondu pixelbits 2016-09-25 06:17:54

Dans les nouvelles versions, cela fonctionne comme ceci:

<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>

--> laissez-catégorie au lieu de #catégorie

4
répondu user1879408 2017-09-25 10:58:30

Merci pour vos efforts, pixelbits, mais la réponse était différente.

Lecture de l'astérisque dans la syntaxe du modèle Angular.io guides vous donne l'indice.

Cela l'a résolu:

<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> 
2
répondu skovmand 2015-12-30 16:56:56

Travaillé avec 5.2.x

<ng-template ngFor let-category [ngForOf]="categories">
  <label class="value-fields_label">{{ category.name }}</label>
  <h3 class="value-fields_value">{{ category.title }}</h3>
</ng-template>
1
répondu Rahmathullah M 2018-03-16 04:45:06