Czy mogę używać ngIf
bez dodatkowego pojemnika?
<tr *ngFor="...">
<div *ngIf="...">
...
</div>
<div *ngIf="!...">
...
</div>
</tr>
Nie działa w tabeli, ponieważ spowodowałoby to nieprawidłowy kod HTML.
Czy mogę używać ngIf
bez dodatkowego pojemnika?
<tr *ngFor="...">
<div *ngIf="...">
...
</div>
<div *ngIf="!...">
...
</div>
</tr>
Nie działa w tabeli, ponieważ spowodowałoby to nieprawidłowy kod HTML.
Odpowiedzi:
ng-container
jest preferowany nad template
:
<ng-container *ngIf="expression">
Widzieć:
Znalazłem na to metodę na: https://angular.io/docs/ts/latest/guide/template-syntax.html#!#star-template .
Możesz po prostu użyć <template>
tagu i zastąpić go *ngIf
w [ngIf]
ten sposób.
<template [ngIf]="...">
...
</template>
template
znacznik, domyślnie przedrostek dyrektyw kątowych z * tworzy znacznik szablonu. więc oba są takie same[ngIf] and *ngIf
*ngIf
masz element wewnątrz szablonu, nie masz go, jeśli napiszesz template
siebie. W pewnych okolicznościach dodatkowy element może przeszkadzać.
template
tag w środku, tr
/ td
tag?
*ngIf="foo"
jest równoważne z <template [ngIf]="foo">
tagiem opakowującym . Krótko mówiąc, template
+ []
== *
, więc []
! = *
. *
ma sens w każdym elemencie z wyjątkiem template
.
Nie możesz umieścić div
bezpośrednio w środku tr
, to spowodowałoby nieprawidłowy HTML. tr
może zawierać tylko element td
/ th
/ table
, a wewnątrz nich możesz mieć inne elementy HTML.
Możesz nieznacznie zmienić kod HTML, aby mieć *ngFor
nad sobą tbody
i mieć ngIf
nad tr
sobą, jak poniżej.
<tbody *ngFor="...">
<tr *ngIf="...">
...
</tr>
<tr *ngIf="!...">
...
</tr>
..
</tbody>