Ngoại lệ: Không thể liên kết với 'ngFor' vì đây không phải là tài sản bản địa đã biết


286

Tôi đang làm gì sai?

import {bootstrap, Component} from 'angular2/angular2'

@Component({
  selector: 'conf-talks',
  template: `<div *ngFor="talk of talks">
     {{talk.title}} by {{talk.speaker}}
     <p>{{talk.description}}
   </div>`
})
class ConfTalks {
  talks = [ {title: 't1', speaker: 'Brian', description: 'talk 1'},
            {title: 't2', speaker: 'Julie', description: 'talk 2'}];
}
@Component({
  selector: 'my-app',
  directives: [ConfTalks],
  template: '<conf-talks></conf-talks>'
})
class App {}
bootstrap(App, [])

Lỗi là

EXCEPTION: Template parse errors:
Can't bind to 'ngFor' since it isn't a known native property
("<div [ERROR ->]*ngFor="talk of talks">

Câu trả lời:


644

Tôi đã bỏ lỡ lettrước mặt talk:

<div *ngFor="let talk of talks">

Lưu ý rằng kể từ phiên bản beta.17 sử dụng #...để khai báo các biến cục bộ bên trong các chỉ thị cấu trúc như NgFor không được dùng nữa. Sử dụng letthay thế.

<div *ngFor="#talk of talks"> bây giờ trở thành <div *ngFor="let talk of talks">

Câu trả lời gốc:

Tôi đã bỏ lỡ #trước mặt talk:

<div *ngFor="#talk of talks">

Thật dễ dàng để quên điều đó #. Tôi muốn thông báo lỗi ngoại lệ Angular thay vì nói :
you forgot that # again.


Chính xác thì ký hiệu là gì? Tôi đã sửa các vấn đề của riêng mình, nhưng tôi không chắc điều này thậm chí còn làm gì.
kiểu dữ liệu

4
@datatype_void, hàm băm ( #) được sử dụng để khai báo biến mẫu cục bộ
Mark Rajcok

Tôi đã thử sử dụng cú pháp "let" thay vì # nó tạo ra "Không thể liên kết với 'ngFor' vì nó không phải là một tài sản bản địa đã biết". Hành vi tương tự như bạn đã thấy trong câu hỏi ban đầu của bạn. Tôi đã thay đổi nó trở lại # và nó dường như hoạt động mà không có vấn đề gì. Tôi đang sử dụng angular2.0.0-rc.1 và tôi cũng có hành vi tương tự với angular2.0.0-beta.17
Chadley08

1
@ Chadley08, tạo một plunker. Nó nên hoạt động. Đây là một punker RC.1 và một plunker beta.17 đều hoạt động tốt.
Mark Rajcok

Đây là một vấn đề góc cạnh về thông báo lỗi bị sai lệch: github.com/angular/angular/issues/10644
Alexander Taylor

79

Một lỗi đánh máy khác dẫn đến lỗi của OP có thể được sử dụng in:

<div *ngFor="let talk in talks">

Bạn nên sử dụng ofthay thế:

<div *ngFor="let talk of talks">

21

Tuyên bố này được sử dụng trong phiên bản Angular2 Beta .....

Sau đây sử dụng hãy để thay vì #

hãy để từ khóa được sử dụng để khai báo biến cục bộ


13

Trong trường hợp của tôi, đó là một lá thư nhỏ f. Tôi đang chia sẻ câu trả lời này chỉ vì đây là kết quả đầu tiên trên google

đảm bảo viết *ngFor


10

Trong góc 7 đã sửa lỗi này bằng cách thêm các dòng này vào .module.tstệp:

import { CommonModule } from '@angular/common'; imports: [CommonModule]


2
Ngạc nhiên vì điều này không có nhiều upvote. Hoàn toàn quên nhập CommonModule vào một trong các mô-đun của tôi và tự mình gặp phải lỗi này.
Allen Rufolo

8

Bạn nên sử dụng từ khóa let để khai báo các biến cục bộ, ví dụ * ngFor = "let talk of speak"


5

Đối với tôi, để cắt ngắn một câu chuyện dài, tôi đã vô tình hạ cấp xuống angular-beta-16.

Cú pháp let ... CHỈ hợp lệ trong 2.0.0-beta.17 +

Nếu bạn thử cú pháp hãy để bất cứ điều gì bên dưới phiên bản này. Bạn sẽ tạo ra lỗi này.

Nâng cấp lên angular-beta-17 hoặc sử dụng cú pháp #item trong các mục.



2

Tôi đã quên chú thích thành phần của mình bằng " @Input " (Doh!)

book-list.component.html (Mã vi phạm):

<app-book-item
  *ngFor="let book of book$ | async"
  [book]="book">  <-- Can't bind to 'book' since it isn't a known property of 'app-book-item'
</app-book-item>

Phiên bản sửa chữa của book-item.component.ts :

import { Component, OnInit, Input } from '@angular/core';

import { Book } from '../model/book';
import { BookService } from '../services/book.service';

@Component({
  selector: 'app-book-item',
  templateUrl: './book-item.component.html',
  styleUrls: ['./book-item.component.css']
})
export class BookItemComponent implements OnInit {

  @Input()
  public book: Book;

  constructor(private bookService: BookService)  { }

  ngOnInit() {}

}

2

Ngoài ra, đừng cố sử dụng TypeScript thuần túy trong việc này ... Tôi muốn tương ứng nhiều hơn với forviệc sử dụng và sử dụng *ngFor="const filter of filters"và nhận được ngFor không phải là một lỗi thuộc tính đã biết. Chỉ cần thay thế const bằng cách cho phép là làm việc.

Như @ alexander-abakumov đã nói ofthay thế in.


vấn đề của tôi là thay vì "của" Tôi đã sử dụng "trong"
Ishimwe Aubain Consol Nghiệp

0

Trong trường hợp của tôi, mô-đun chứa thành phần sử dụng * ngFor dẫn đến lỗi này, không được bao gồm trong app.module.ts. Bao gồm nó trong mảng nhập khẩu đã giải quyết vấn đề cho tôi.


0

Chỉ cần để trang trải thêm một trường hợp khi tôi đã nhận được báo lỗi tương tự và lý do được sử dụng trong thay vì của trong iterator

Nhầm đường let file in files

Đúng cách let file of files


0

Dùng cái này

<div *ngFor="let talk of talks> 
   {{talk.title}} 
   {{talk.speaker}}
   <p>{{talk.description}} 
</div>

Bạn cần chỉ định biến để lặp qua một mảng của một đố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.