Apa yang saya lakukan salah?
import {bootstrap, Component} from 'angular2/angular2'
@Component({
selector: 'conf-talks',
template: `<div *ngFor="let talk in 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 'ngForIn' since it isn't a known native property
("<div [ERROR ->]*ngFor="let talk in talks">
angular
angular2-directives
Mark Rajcok
sumber
sumber
Jawaban:
Karena ini setidaknya yang ketiga kalinya saya membuang lebih dari 5 menit untuk masalah ini, saya pikir saya akan memposting Q&A. Saya harap ini membantu orang lain di jalan ... mungkin saya!
Saya mengetik
in
alih-alihof
dalam ekspresi ngFor.Sebelum 2-beta.17 , seharusnya:
Pada beta.17, gunakan
let
sintaks alih-alih#
. Lihat UPDATE lebih jauh ke bawah untuk info lebih lanjut.Perhatikan bahwa sintaks ngFor "desugars" menjadi sebagai berikut:
Jika kita gunakan
in
sebagai gantinya, itu berubah menjadiKarena
ngForIn
bukan arahan atribut dengan properti input dengan nama yang sama (sepertingIf
), Angular kemudian mencoba untuk melihat apakah itu adalah properti (asli yang dikenal) daritemplate
elemen, dan itu bukan, maka kesalahannya.UPDATE - per 2-beta.17, gunakan
let
sintaks sebagai ganti#
. Ini pembaruan sebagai berikut:Perhatikan bahwa sintaks ngFor "desugars" menjadi sebagai berikut:
Jika kita gunakan
in
sebagai gantinya, itu berubah menjadisumber
#
sebelumtalk
variabel (seperti Anda mengatakan: "Harapan itu membantu orang lain di jalan ... mungkin saya!")TL; DR;
Gunakan biarkan ... bukannya bukannya ... masuk !!
Jika Anda baru untuk Sudut (> 2.x) dan mungkin bermigrasi dari Angular1.x, kemungkinan besar Anda membingungkan
in
denganof
. Seperti yang disebutkan andreas dalam komentar di bawah ini,for ... of
iterasivalues
pada objek sementarafor ... in
iterasiproperties
pada objek. Ini adalah fitur baru yang diperkenalkan di ES2015.Cukup ganti:
dengan
Jadi, Anda harus mengganti
in
denganof
ngFor
direktif di dalam untuk mendapatkan nilai.sumber
for..in
iterates kunci / properti objek sementarafor...of
iterates nilai-nilai objek.for(prop in foo) {}
sama denganfor(prop of Object.keys(foo)) {}
. Ini adalah fitur bahasa baru dari ECMA Script 2015 / ES6. Jadi ini hanya masalah Angular jarak jauh.Coba impor
import { CommonModule } from '@angular/common';
di sudut bersudut karena*ngFor
,*ngIf
semuanya ada diCommonModule
sumber
Dalam kasus saya, WebStrom lengkapi-otomatis dimasukkan dengan huruf kecil
*ngfor
, bahkan ketika Anda memilih unta yang tepat (*ngFor
).sumber
Masalah saya adalah, bahwa Visual Studio entah bagaimana secara otomatis diturunkan
*ngFor
ke*ngfor
pada copy & paste.sumber
Ada alternatif jika Anda ingin menggunakan
of
dan tidak beralih kein
. Anda dapat menggunakan yangKeyValuePipe
diperkenalkan di 6.1. Anda dapat dengan mudah beralih pada objek:sumber
T: Tidak dapat mengikat ke 'pSelectableRow' karena ini bukan properti yang dikenal dari 'tr'.
A: Anda perlu mengkonfigurasi primeng tabulemodule di ngmodule
sumber
solusi saya adalah - hapus saja karakter '*' dari ekspresi ^ __ ^
sumber