Pengecualian: Tidak dapat mengikat ke 'ngFor' karena ini bukan properti asli yang dikenal

286

Apa yang saya lakukan salah?

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, [])

Kesalahannya adalah

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

Jawaban:

644

Saya rindu letdi depan talk:

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

Perhatikan bahwa pada beta.17 penggunaan #...untuk mendeklarasikan variabel lokal di dalam arahan struktural seperti NgFor sudah ditinggalkan. Gunakan letsebagai gantinya.

<div *ngFor="#talk of talks"> sekarang menjadi <div *ngFor="let talk of talks">

Jawaban asli:

Saya rindu #di depan talk:

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

Sangat mudah untuk melupakannya #. Saya berharap pesan kesalahan pengecualian sudut gantinya akan mengatakan:
you forgot that # again.

Mark Rajcok
sumber
Untuk apa tepatnya ampersand? Saya memperbaiki masalah saya sendiri, tetapi saya tidak yakin apa yang bahkan dilakukannya.
datatype_void
4
@datatype_void, hash ( #) digunakan untuk mendeklarasikan variabel templat lokal
Mark Rajcok
Saya mencoba menggunakan sintaks "let" alih-alih # itu menghasilkan "Tidak dapat mengikat 'ngFor' karena ini bukan properti asli yang dikenal". Perilaku yang sama seperti yang Anda lihat di pertanyaan awal Anda. Saya mengubahnya kembali ke # dan sepertinya berhasil tanpa masalah. Saya menggunakan angular2.0.0-rc.1 dan saya juga mendapatkan perilaku yang sama dengan angular2.0.0-beta.17
Chadley08
1
@ Chadley08, buat plunker. Itu harus bekerja. Berikut ini adalah RC.1 punker dan plunker beta.17 yang berfungsi dengan baik.
Mark Rajcok
Inilah masalah Angular tentang pesan kesalahan yang menyesatkan: github.com/angular/angular/issues/10644
Alexander Taylor
79

Kesalahan ketik lain yang mengarah ke kesalahan OP dapat menggunakan in:

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

Anda sebaiknya menggunakan of:

<div *ngFor="let talk of talks">
Alexander Abakumov
sumber
21

Pernyataan ini digunakan dalam versi Angular2 Beta .....

Selanjutnya gunakan biarkan bukan #

biarkan kata kunci digunakan untuk mendeklarasikan variabel lokal

Naveen
sumber
13

Dalam kasus saya, itu adalah surat kecil f. Saya membagikan jawaban ini hanya karena ini adalah hasil pertama di google

pastikan untuk menulis *ngFor

Mohamed Kawsara
sumber
10

Di sudut 7 diperbaiki ini dengan menambahkan baris ini ke .module.tsfile:

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

Alferd Nobel
sumber
2
Terkejut ini tidak memiliki lebih banyak upvotes. Benar-benar lupa untuk mengimpor CommonModule di salah satu modul saya dan mengalami kesalahan ini sendiri.
Allen Rufolo
8

Anda harus menggunakan kata kunci let untuk mendeklarasikan variabel lokal mis. * NgFor = "let talk of talk"

Rsona
sumber
5

Bagi saya, untuk mempersingkat cerita, saya secara tidak sengaja diturunkan ke angular-beta-16.

Sintaks let ... HANYA valid dalam 2.0.0-beta.17 +

Jika Anda mencoba membiarkan sintaks pada apa pun di bawah versi ini. Anda akan menghasilkan kesalahan ini.

Tingkatkan ke angular-beta-17 atau gunakan #item dalam sintaksis item.

Shaun
sumber
5

Dalam kasus saya, saya membuat kesalahan dengan menyalin *ng-for=dari dokumen.

https://angular.io/guide/user-input

Koreksi saya jika saya salah. Tetapi tampaknya *ng-for=telah diubah menjadi*ngFor=

Kris Hollenbeck
sumber
2

Saya lupa membubuhi keterangan komponen saya dengan " @Input " (Doh!)

book-list.component.html (Kode yang menyinggung):

<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>

Versi buku-item.component.ts yang diperbaiki :

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() {}

}
paulsm4
sumber
2

Juga jangan mencoba menggunakan TypeScript murni dalam ini ... Saya ingin lebih berhubungan dengan forpenggunaan dan penggunaan*ngFor="const filter of filters" dan mendapatkan ngFor bukan kesalahan properti yang dikenal. Hanya mengganti const dengan let berfungsi.

Seperti @ alexander-abakumov berkata untuk ofdigantikan oleh in.

shamox
sumber
masalah saya bukannya "dari" Saya menggunakan "dalam"
Ishimwe Aubain Consolateur
0

Dalam kasus saya, modul yang berisi komponen menggunakan * ngFor mengakibatkan kesalahan ini, tidak termasuk dalam app.module.ts. Termasuk di sana di array impor menyelesaikan masalah untuk saya.

Roy Touw
sumber
0

Hanya untuk menutupi satu kasus ketika saya mendapatkan error yang sama dan alasan menggunakan di bukannya dari dalam iterator

Cara yang salah let file in files

Jalan yang benar let file of files

Robin Mathur
sumber
0

Gunakan ini

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

Anda perlu menentukan variabel untuk beralih di atas larik objek

Akshay S Patil
sumber