Utilizzando ngIf senza un elemento aggiuntivo in Angular 2


107

Posso usare ngIfsenza un elemento contenitore aggiuntivo?

<tr *ngFor="...">
  <div *ngIf="...">
    ...
  </div>
  <div *ngIf="!...">
    ...
  </div>
</tr>

Non funziona in una tabella perché renderebbe HTML non valido.

Risposte:



21

Ho trovato un metodo per questo su: https://angular.io/docs/ts/latest/guide/template-syntax.html#!#star-template .

Puoi semplicemente usare il <template>tag e sostituirlo *ngIfcon [ngIf]questo.

<template [ngIf]="...">
  ...
</template>

buono ma * ng Se itslef crea un templatetag, per impostazione predefinita il prefisso delle direttive angolari con * crea un tag modello. quindi entrambi sono uguali[ngIf] and *ngIf
Pardeep Jain

1
Con *ngIfhai un elemento all'interno del modello, non lo fai se scrivi tu templatestesso. In determinate circostanze l'elemento aggiuntivo potrebbe interferire.
Teak

Possiamo mettere templatetag all'interno, tr/ tdtag?
Pankaj Parkar

Sì, è una specie di elemento speciale. Per definizione non è consentito w3.org/TR/html401/struct/tables.html#h-11.2.3 ma funzionerà e verrà visualizzato. Se sto usando * ngIf non funziona btw. ma con [ngIf] lo fa. Posso chiederti se puoi dirmi perché è così?
sascha10000

1
@ sascha10000 Perché avere *ngIf="foo"è equivalente al <template [ngIf]="foo">tag di avvolgimento . In breve, template+ []== *, quindi []! = *. *ha senso in qualsiasi elemento tranne template .
Franklin Yu

4

Non puoi inserire divdirettamente all'interno tr, ciò renderebbe HTML non valido. trpuò contenere solo l' elemento td/ th/ tablee al loro interno potresti avere altri elementi HTML.

Potresti cambiare leggermente il tuo HTML per avere *ngForsopra tbodye ngIfsopra trse stesso come sotto.

<tbody *ngFor="...">
  <tr *ngIf="...">
    ...
  </tr>
  <tr  *ngIf="!...">
    ...
  </tr>
  ..
</tbody>

Fondamentalmente risolverebbe il problema, ma scambierai l'abilità principale che ottieni con tbody. Se hai un tavolo grande puoi aggiustare la testa e scorrere il corpo. Il tuo tbody avrebbe il ruolo di tr e tr avrebbe il ruolo di un wrapper aggiuntivo. Se non è necessario scorrere e fissare la testa in alto, questa è una soluzione pragmatica. Il mio riferimento per quello che ho detto: w3.org/TR/html401/struct/tables.html#h-11.2.3
sascha10000
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.