Angular 2 cho vòng lặp chỉ mục đầu tiên, cuối cùng,


87

Tôi đang cố gắng đặt làm mặc định là lần xuất hiện đầu tiên trong ví dụ này: plunkr

gặp lỗi sau:

    Unhandled Promise rejection: Template parse errors:
    TypeError: Cannot read property 'toUpperCase' of undefined ("dButtonToggleGroup">
    <md-button-toggle [ERROR ->]*ngFor="let indicador of indicadores; #first = first" value="indicador.id" [checked]="first">"): ng:///AppModule/HomeComponent.html@35:78
    Parser Error: Unexpected token #, expected identifier, keyword, or string at column 31 in [let indicador of indicadores; #first = first] in ng:///AppModule/HomeComponent.html@35:78 ("<md-button-toggle *ngFor="let indicador of indicadores; #first = first" value="indicador.id" [ERROR ->][checked]="first">
    <span>{{ indicado"): ng:///AppModule/HomeComponent.html@35:153

chuyện gì thế??

Câu trả lời:


176

Kiểm tra plunkr này .

Khi bạn liên kết với các biến, bạn cần sử dụng dấu ngoặc. Ngoài ra, bạn sử dụng thẻ bắt đầu bằng # khi bạn muốn nhận tham chiếu đến các phần tử trong html của mình, không phải để khai báo các biến bên trong các mẫu như vậy.

<md-button-toggle *ngFor="let indicador of indicadores; let first = first;" [value]="indicador.id" [checked]="first"> 
...

Chỉnh sửa: Cảm ơn Christopher Moore : Angular cho thấy các biến cục bộ sau:

  • index
  • first
  • last
  • even
  • odd

Cảm ơn bạn! điều đó đã giúp tôi rất nhiều, nhưng tôi đã cố gắng sử dụng cái đầu tiên vì khi tìm kiếm về nó, tôi đã tìm thấy một số ví dụ như: blog.angular-university.io/angular-2-ngfor (Xác định phần tử đầu tiên và cuối cùng của danh sách)
PriNcee

À, được rồi. Bạn cũng có thể làm điều đó. Thay vào đó let i = index, chỉ cần thay đổi nó thành let first = first;và thay đổi liên kết [đã kiểm tra] thành chỉ kiểm tra "đầu tiên" thay vì "i == 0".
Steveadoo,

đẹp! bây giờ đang làm việc! nhưng tôi không thể hiểu tại sao tôi phải liên kết thuộc tính đã kiểm tra bằng dấu ngoặc
PriNcee

29
@Steveadoo trong ngForphơi bày góc các biến địa phương sau index, first, last, evenodd. Bạn có thể cập nhật câu trả lời để làm rõ điểm này cho người dùng trong tương lai không?
Christopher Moore,

2
Thay vì let first = firstbạn có thể viết first as isFirst(isFirst là biến tùy chỉnh) như được mô tả ở đây: angle.io/api/common/NgForOf#local-variables
jurl

57

Đây là cách nó được thực hiện trong Angular 6

<li *ngFor="let user of userObservable ; first as isFirst">
   <span *ngIf="isFirst">default</span>
</li>

Lưu ý sự thay đổi từ let first = firstthànhfirst as isFirst


Bạn cần phải thay thế các đường ống |với ;cho nó làm việc.
Florian Moser

let first = firstfirst as isFirstcả tờ khai là chính xác để sử dụng, thứ hai một bí danh là khá nhiều có thể đọc được
Mohan Ram

0

Bằng cách này, bạn có thể nhận được bất kỳ chỉ mục nào trong *ngForvòng lặp trong ANGULAR ...

<ul>
  <li *ngFor="let object of myArray; let i = index; let first = first ;let last = last;">
    <div *ngIf="first">
       // write your code...
    </div>

    <div *ngIf="last">
       // write your code...
    </div>
  </li>
</ul>

Chúng tôi có thể sử dụng những bí danh này trong *ngFor

  • index: number: let i = indexĐể có được tất cả các chỉ số của đối tượng.
  • first: boolean: let first = firstĐể có được chỉ số đầu tiên của đối tượng.
  • last: boolean: let last = lastĐể có được chỉ số cuối cùng của đối tượng.
  • odd: boolean: let odd = oddĐể có được chỉ số lẻ của đối tượng.
  • even: boolean: let even = evenĐể có được chỉ số chẵn các đối tượng.
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.