Qu'est-ce que je fais mal?
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'erreur est
EXCEPTION: Template parse errors:
Can't bind to 'ngFor' since it isn't a known native property
("<div [ERROR ->]*ngFor="talk of talks">
J'ai raté let
devant talk
:
<div *ngFor="let talk of talks">
Notez que à partir de la version bêta.17 utilisation de #...
pour déclarer des variables locales dans des directives structurelles telles que NgFor est obsolète. Utilisez let
à la place de .<div *ngFor="#talk of talks">
devient maintenant <div *ngFor="let talk of talks">
Réponse originale:
J'ai raté #
devant talk
:
<div *ngFor="#talk of talks">
Il est si facile d’oublier ce #
. Je souhaite que le message d'erreur exception angulaire dise plutôt:
you forgot that # again
.
Une autre faute de frappe menant à l'erreur de l'OP pourrait utiliser in
:
<div *ngFor="let talk in talks">
au lieu de of
:
<div *ngFor="let talk of talks">
Cette déclaration utilisée dans la version bêta d'Angular2 .....
Par la suite, utilisez let au lieu de #
let mot-clé est utilisé pour déclarer la variable locale
Dans mon cas, c'était une petite lettre f
. Je partage cette réponse simplement parce que c'est le premier résultat sur Google
assurez-vous d'écrire *ngFor
Dans angular 7, ceci a été corrigé en ajoutant ces lignes au fichier .module.ts
:
import { CommonModule } from '@angular/common'; imports: [CommonModule]
Pour ma part, pour faire court, j’ai été rétrogradé par inadvertance en angular-beta-16.
La syntaxe let ... est UNIQUEMENT valide dans 2.0.0-beta.17 +
Si vous essayez la syntaxe de let sur quelque chose en dessous de cette version. Vous allez générer cette erreur.
Mettez à niveau angular-beta-17 ou utilisez la syntaxe #item in items.
Dans mon cas, j'ai commis l'erreur de copier *ng-for=
à partir de la documentation.
https://angular.io/guide/user-input
Corrigez-moi si je me trompe. Mais il semble que *ng-for=
ait été remplacé par *ngFor=
N'essayez pas non plus d'utiliser purement TypeScript dans ceci ... Je voulais correspondre davantage à for
usage et utiliser *ngFor="const filter of filters"
et j'ai obtenu le ngFor, pas une erreur de propriété connue. Il suffit de remplacer const par let.
Comme @ alexander-abakumov a dit pour le of
remplacé par in
.
J'ai oublié d'annoter mon composant avec " @Input " (Doh!)
book-list.component.html (code fautif):
<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>
Version corrigée de 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() {}
}
Dans mon cas, le module contenant le composant à l'aide de * ngFor, entraînant cette erreur, n'était pas inclus dans app.module.ts. L'inclure là-bas dans le tableau imports a résolu le problème pour moi.