Sử dụng ngIf mà không có phần tử phụ trong Angular 2


107

Tôi có thể sử dụng ngIfmà 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:



21

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ế *ngIfbằng thẻ [ngIf]như thế này.

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

tốt nhưng * ngNếu itlef tạo templatethẻ, 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
Pardeep Jain

1
Với việc *ngIfbạ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.
Teak

Chúng ta có thể đặt templatethẻ bên trong, tr/ tdthẻ không?
Pankaj Parkar

Vâng, đó là một loại yếu tố đặc biệt. Theo định nghĩa, nó không được phép w3.org/TR/html401/struct/tables.html#h-11.2.3 nhưng nó sẽ hoạt động và hiển thị. Nếu tôi đang sử dụng * ngNếu nó không hoạt động btw. nhưng với [ngIf] thì có. Tôi có thể hỏi nếu bạn có thể cho tôi biết tại sao như vậy?
sascha10000

1
@ sascha10000 Vì có *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 .
Franklin Yu

4

Bạn không thể đặt divtrực tiếp vào bên trong tr, điều đó sẽ làm cho HTML không hợp lệ. trchỉ có thể có td/ th/ tablephầ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ó *ngForhơn tbodyvà có ngIfhơn trchính nó như bên dưới.

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

Về cơ bản nó sẽ giải quyết được vấn đề nhưng bạn sẽ đánh đổi khả năng cốt lõi mà bạn có được với tbody. Nếu bạn có một chiếc bàn lớn, bạn có thể cố định đầu bằng cách cuộn tbody. Người của bạn sẽ có vai trò của tr và tr sẽ có vai trò của một trình bao bọc bổ sung. Nếu không cần cuộn và cố định đầu ở trên thì đây là một giải pháp thực dụng. Tài liệu tham khảo của tôi cho những gì tôi đã nói: w3.org/TR/html401/struct/tables.html#h-11.2.3
sascha10000
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.