Tôi có thể sử dụng ngIf
mà không có phần tử vùng chứa phụ không?
<tr *ngFor="...">
<div *ngIf="...">
...
</div>
<div *ngIf="!...">
...
</div>
</tr>
Nó không hoạt động trong một bảng vì điều đó sẽ làm cho HTML không hợp lệ.
Tôi có thể sử dụng ngIf
mà không có phần tử vùng chứa phụ không?
<tr *ngFor="...">
<div *ngIf="...">
...
</div>
<div *ngIf="!...">
...
</div>
</tr>
Nó không hoạt động trong một bảng vì điều đó sẽ làm cho HTML không hợp lệ.
Câu trả lời:
ng-container
được ưu tiên hơn template
:
<ng-container *ngIf="expression">
Xem:
Tôi đã tìm thấy một phương pháp cho điều đó trên: https://angular.io/docs/ts/latest/guide/template-syntax.html#!#star-template .
Bạn chỉ cần sử dụng <template>
thẻ và thay thế *ngIf
bằng thẻ [ngIf]
như thế này.
<template [ngIf]="...">
...
</template>
template
thẻ, theo mặc định, tiền tố chỉ thị góc với * sẽ tạo thẻ mẫu. vì vậy cả hai đều giống nhau[ngIf] and *ngIf
*ngIf
bạn có một phần tử bên trong mẫu, nếu bạn tự viết phần tử thì không template
. Trong một số trường hợp, yếu tố phụ có thể can thiệp.
template
thẻ bên trong, tr
/ td
thẻ không?
*ngIf="foo"
tương đương với <template [ngIf]="foo">
thẻ gói . Tóm lại, template
+ []
== *
, vì vậy []
! = *
. *
có ý nghĩa trong bất kỳ phần tử nào ngoại trừ template
.
Bạn không thể đặt div
trực tiếp vào bên trong tr
, điều đó sẽ làm cho HTML không hợp lệ. tr
chỉ có thể có td
/ th
/ table
phần tử trong đó và bên trong chúng, bạn có thể có các phần tử HTML khác.
Bạn có thể thay đổi một chút HTML của mình để có *ngFor
hơn tbody
và có ngIf
hơn tr
chính nó như bên dưới.
<tbody *ngFor="...">
<tr *ngIf="...">
...
</tr>
<tr *ngIf="!...">
...
</tr>
..
</tbody>