Eccezione: impossibile associare 'ngFor' poiché non è una proprietà nativa nota


286

Che cosa sto facendo di sbagliato?

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'errore è

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

Risposte:


644

Mi sono perso letdi fronte a talk:

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

Si noti che a partire da beta.17 l' utilizzo di #...per dichiarare variabili locali all'interno di direttive strutturali come NgFor è obsoleto. Usa letinvece.

<div *ngFor="#talk of talks"> ora diventa <div *ngFor="let talk of talks">

Risposta originale:

Mi sono perso #di fronte a talk:

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

È così facile dimenticarlo #. Vorrei che il messaggio di errore di eccezione angolare potrebbe invece dire:
you forgot that # again.


A cosa serve esattamente la e commerciale? Ho risolto i miei problemi, ma non sono sicuro di ciò che fa.
datatype_void

4
@datatype_void, l'hash ( #) viene utilizzato per dichiarare una variabile di modello locale
Mark Rajcok,

Ho provato a usare la sintassi "let" invece del # che ha prodotto "Impossibile associare 'ngFor' poiché non è una proprietà nativa nota". Stesso comportamento che hai visto nella tua domanda originale. L'ho cambiato di nuovo in # e sembrava funzionare senza problemi. Sto usando angular2.0.0-rc.1 e ho anche avuto lo stesso comportamento con angular2.0.0-beta.17
Chadley08,

1
@ Chadley08, crea un plunker. Dovrebbe funzionare. Ecco un punk rc.1 e un plunker beta.17 che funzionano entrambi bene.
Mark Rajcok,

Ecco un problema angolare sul messaggio di errore fuorviante: github.com/angular/angular/issues/10644
Alexander Taylor

80

Un altro errore di battitura che porta all'errore dell'OP potrebbe essere l'utilizzo di in:

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

Dovresti usare ofinvece:

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

21

Questa affermazione utilizzata nella versione beta di Angular2 .....

Di seguito uso let invece di #

let parola chiave viene utilizzata per dichiarare la variabile locale


13

Nel mio caso, era una piccola lettera f. Sto condividendo questa risposta solo perché questo è il primo risultato su Google

assicurati di scrivere *ngFor


10

In Angular 7 è stato risolto aggiungendo queste righe al .module.tsfile:

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


2
Sorpreso, questo non ha più voti. Ho completamente dimenticato di importare CommonModule in uno dei miei moduli e ho riscontrato questo errore da solo.
Allen Rufolo,

8

Dovresti usare la parola chiave let per dichiarare le variabili locali, ad esempio * ngFor = "parliamo di discorsi"


5

Per dirla in breve, avevo inavvertitamente ridotto a angular-beta-16.

La sintassi let ... è valida SOLO in 2.0.0-beta.17 +

Se provi la sintassi let su qualcosa al di sotto di questa versione. Genererai questo errore.

Aggiorna a angular-beta-17 o usa #item nella sintassi degli elementi.



2

Ho dimenticato di annotare il mio componente con " @Input " (Doh!)

book-list.component.html (codice offensivo):

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

Versione corretta di 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

Inoltre, non provare a usare TypeScript puro in questo ... Volevo corrispondere maggiormente forall'uso e all'uso*ngFor="const filter of filters" e ho ottenuto ngPer non un errore di proprietà noto. La semplice sostituzione di const con let sta funzionando.

Come ha detto @ alexander-abakumov per il ofsostituito da in.


il mio problema era invece di "of" Stavo usando "in"
Ishimwe Aubain Consolateur

0

Nel mio caso, il modulo contenente il componente usando * ngPer ottenere questo errore, non è stato incluso in app.module.ts. Includendolo nella matrice delle importazioni ho risolto il problema per me.


0

Giusto per coprire più un caso, quando mi è stato sempre lo stesso errore e il motivo stavo usando in al posto di di in iteratore

Senso vietato let file in files

Modo corretto let file of files


0

Usa questo

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

È necessario specificare la variabile da ripetere su una matrice di un oggetto

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.