¿Qué estoy haciendo 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, [])
El error es
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
fuente
                
                fuente

Respuestas:
Como esta es al menos la tercera vez que malgasto más de 5 minutos en este problema, pensé que publicaría las preguntas y respuestas. Espero que ayude a alguien más en el camino ... ¡probablemente a mí!
He escrito
inen lugar deofen la expresión ngFor.Antes de 2-beta.17 , debería ser:
A partir de beta.17, use la
letsintaxis en lugar de#. Vea la ACTUALIZACIÓN más abajo para más información.Tenga en cuenta que la sintaxis ngFor "se desugará" en lo siguiente:
Si usamos en su
inlugar, se convierte enDado
ngForInque no es una directiva de atributo con una propiedad de entrada del mismo nombre (comongIf), Angular intenta ver si es una propiedad (nativa conocida) deltemplateelemento, y no lo es, de ahí el error.ACTUALIZACIÓN : a partir de 2-beta.17, use la
letsintaxis en lugar de#. Esto se actualiza a lo siguiente:Tenga en cuenta que la sintaxis ngFor "se desugará" en lo siguiente:
Si usamos en su
inlugar, se convierte enfuente
#antes de latalkvariable (como dijo: "espero que ayude a alguien más en el futuro ... ¡probablemente a mí!")TL; DR;
Use let ... of en lugar de let ... in !!
Si eres nuevo en angular (> 2.x) y, posiblemente, la migración de Angular1.x, más probable es que estás confundiendo
inconof. Como Andreas ha mencionado en los comentarios a continuaciónfor ... ofitera sobrevaluesde un objeto mientras sefor ... initera sobrepropertiesen un objeto. Esta es una nueva característica introducida en ES2015.Simplemente reemplace:
con
Por lo tanto, debe reemplazar
incon laofngFordirectiva interna para obtener los valores.fuente
for..initera las claves / propiedadesfor...ofdel objeto mientras itera los valores del objeto.for(prop in foo) {}es el mismo quefor(prop of Object.keys(foo)) {}. Esta es una nueva característica del lenguaje de ECMA Script 2015 / ES6. Entonces, esto es solo remotamente un problema angular.Intenta importar
import { CommonModule } from '@angular/common';en la final angular que*ngFor,*ngIftodos están presentes enCommonModulefuente
En mi caso, WebStrom autocompletado insertado en minúsculas
*ngfor, incluso cuando parece que eliges el camello correcto (*ngFor).fuente
Mi problema fue que Visual Studio de alguna manera se minúscula automáticamente
*ngForal*ngforcopiar y pegar.fuente
Hay una alternativa si desea usar
ofy no cambiar ain. Se puede usarKeyValuePipeintroducido en 6.1. Puede iterar fácilmente sobre un objeto:fuente
P: No se puede vincular a 'pSelectableRow' ya que no es una propiedad conocida de 'tr'.
R: debe configurar el primeng tabulemodule en ngmodule
fuente
mi solución fue: simplemente elimine el carácter '*' de la expresión ^ __ ^
fuente