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

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.


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

21

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

Selanjutnya gunakan biarkan bukan #

biarkan kata kunci digunakan untuk mendeklarasikan variabel lokal


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


10

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

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


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"


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.



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

}

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.


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.


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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.