2016-02-05 4 views
17

ich dynamisch eine Liste von Kontrollkästchen erstellen müssen, um so i * ngFor verwendet habe, um das Array von Objekten, alles iterieren arbeitet bis Iteration in Ordnung. Das Problem ist aufgetreten, wenn ich den Wert for Attribut im Etikett-Tag gesetzt habe. Winkel hat den Fehler aus:Kann nicht binden ‚für‘, da es keine bekannte einheimische Eigenschaft angular2 ist

nicht ‚für‘ binden kann, da es keine bekannte einheimische Eigenschaft angular2

neue Fehlermeldung

Unhandle Versprechen Ablehnung: Template Fehler analysieren: Kann nicht an 'for' gebunden werden, da es keine bekannte Eigenschaft von 'label' ist.

<div *ngFor="#batch of batch_array"> 
    <label for="{{batch.id}}"><input type="checkbox" [value]="batch.id" id="{{batch.id}}"  
     (click)="batchSelectedEevent(batch.id)" /> {{batch.batch_name}} 
    </label> 
</div> 

hier ist mein plnkr Fehler zeigt: http://plnkr.co/edit/aAQfWvHc7h7IBuYzpItO?p=preview

was falsch hier in meinem Code?

Antwort

21

Update

In Angular2 final [for]="xxx" sollte gut funktionieren. Sie fügten einen Alias ​​von for zu htmlFor hinzu.

original

Angular verwendet standardmäßig Eigenschaftsbindung aber label hat keine Eigenschaft for. Zu sagen Angular explizit Attribut zu verwenden, verbindlich, verwenden Sie stattdessen:

[attr.for]="someField" 

oder

attr.for="{{someField}}" 

statt.

Diese funktionieren auch, weil htmlFor die Eigenschaft for ist widergespiegelt wird.

[htmlFor]="someField" 
htmlFor="{{someField}}" 

In Angular2 RC.6 wurde ein Alias ​​hinzugefügt, so sollten diese jetzt auch funktionieren:

[for]="someField" 

oder

for="{{someField}}" 
+0

wow es funktioniert gut Dank! Kann ich wissen, warum man 'Attr' im' attr.for' anstatt einfach 'for' verwendet? –

+1

Mit 'attr.for' müssen Sie explizit die Attributbindung aktivieren, da Attributbindung teuer ist. Attribute werden im DOM reflektiert, und Änderungen erfordern beispielsweise, dass CSS-Selektoren registriert werden, die mit diesem Attributsatz übereinstimmen. Property Binding ist nur JS und billig, daher der Standard. –

+1

"Eigenschaftsbindung ist nur JS". Das würde ich nicht sagen. Es gibt einige Eigenschaften, die nicht über entsprechende Attribute verfügen, z. B. die häufig verwendete Eigenschaft 'textContent'. Die Bindung an diese Eigenschaften führt auch dazu, dass das DOM aktualisiert wird. –

Verwandte Themen