Qu'est-ce que je fais mal?
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, [])
L'erreur est
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
la source
la source
Réponses:
Comme c'est au moins la troisième fois que je perds plus de 5 minutes sur ce problème, je me suis dit que je publierais les questions et réponses. J'espère que cela aidera quelqu'un d'autre sur la route ... probablement moi!
J'ai tapé
in
au lieu deof
dans l'expression ngFor.Avant 2-beta.17 , ce devrait être:
Depuis la version beta.17, utilisez la
let
syntaxe au lieu de#
. Voir la MISE À JOUR plus bas pour plus d'informations.Notez que la syntaxe ngFor "desugars" dans ce qui suit:
Si nous utilisons à la
in
place, cela se transforme enPuisqu'il
ngForIn
ne s'agit pas d'une directive d'attribut avec une propriété d'entrée du même nom (commengIf
), Angular essaie alors de voir s'il s'agit d'une propriété (native connue) de l'template
élément, et ce n'est pas le cas, d'où l'erreur.MISE À JOUR - à partir de la 2-beta.17, utilisez la
let
syntaxe au lieu de#
. Cela met à jour les éléments suivants:Notez que la syntaxe ngFor "desugars" dans ce qui suit:
Si nous utilisons à la
in
place, cela se transforme enla source
#
avanttalk
(comme vous l'avez dit: "j'espère que cela aidera quelqu'un d'autre sur la route ... probablement moi!")TL; DR;
Utilisez let ... of au lieu de let ... in !!
Si vous êtes nouveau angulaire (> 2.x) et éventuellement la migration de Angular1.x, le plus probable que vous confondez
in
avecof
. Comme andreas a mentionné dans les commentaires ci - dessousfor ... of
itère survalues
d' un objet tout enfor ... in
itère surproperties
dans un objet. Il s'agit d'une nouvelle fonctionnalité introduite dans ES2015.Remplacez simplement:
avec
Donc, vous devez remplacer
in
par laof
ngFor
directive inside pour obtenir les valeurs.la source
for..in
itère les clés / propriétés defor...of
l'objet tout en itérant les valeurs de l'objet.for(prop in foo) {}
est le même quefor(prop of Object.keys(foo)) {}
. Il s'agit d'une nouvelle fonctionnalité linguistique d'ECMA Script 2015 / ES6. Il ne s'agit donc qu'à distance d'un problème angulaire.Essayez d'importer
import { CommonModule } from '@angular/common';
en finale angulaire car*ngFor
,*ngIf
tous sont présents dansCommonModule
la source
Dans mon cas, la saisie automatique WebStrom insérée en minuscules
*ngfor
, même s'il semble que vous choisissiez le bon boîtier camel (*ngFor
).la source
Mon problème était que Visual Studio en quelque sorte automatiquement converti en minuscules
*ngFor
à*ngfor
le copier-coller.la source
Il existe une alternative si vous souhaitez utiliser
of
et ne pas passer àin
. Vous pouvez utiliserKeyValuePipe
introduit dans 6.1. Vous pouvez facilement parcourir un objet:la source
Q: Impossible de se lier à 'pSelectableRow' car ce n'est pas une propriété connue de 'tr'.
A: vous devez configurer le module tabulem primeng dans ngmodule
la source
ma solution était - il suffit de supprimer le caractère '*' de l'expression ^ __ ^
la source