2016-02-05 12 views
17

Devo creare un elenco di checkbox in modo dinamico così ho usato * ngFor per iterare la matrice di oggetti tutto funziona fino all'iterazione. il problema si verifica quando imposto il valore dell'attributo for nel tag etichetta. angolare ha lanciare l'errore:Impossibile collegarsi a "for" poiché non è una proprietà nativa conosciuta angular2

non può legarsi a 'per' dato che non è un angular2 noto proprietà nativa

nuovo messaggio di errore

non gestita Promessa rifiuto: Template errori di analisi: impossibile eseguire il binding a "for" poiché non è una proprietà nota di "etichetta".

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

Ecco il mio plnkr mostrando di errore: http://plnkr.co/edit/aAQfWvHc7h7IBuYzpItO?p=preview

che cosa è sbagliato qui nel mio codice?

risposta

21

aggiornamento

In Angular2 finale [for]="xxx" dovrebbe funzionare bene. Hanno aggiunto un alias da for a htmlFor.

originale

angolare di default utilizza la proprietà vincolante, ma label non avere una proprietà for. A dire angolare esplicitamente di usare vincolante attributo, utilizzare:

[attr.for]="someField" 

o

attr.for="{{someField}}" 

invece.

Questi funzionano anche perché htmlFor si riflette nella proprietà for.

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

In Angular2 rc.6 un alias è stato aggiunto in modo da questi dovrebbero ora funzionare così:

[for]="someField" 

o

for="{{someField}}" 
+0

wow funziona benissimo, grazie! potrei sapere perché usare 'attr' in' attr.for' invece di semplicemente 'for'? –

+1

Con 'attr.for' devi esplicitamente optare per attribuire il binding perché il binding dell'attributo è costoso. Gli attributi si riflettono nel DOM e le modifiche richiedono ad esempio di verificare se i selettori CSS sono registrati che corrispondono a questo set di attributi. L'associazione di proprietà è solo JS ed economica, quindi l'impostazione predefinita. –

+1

"L'associazione di proprietà è solo JS". Non direi proprio questo. Ci sono alcune proprietà che non hanno attributi corrispondenti - ad es., La proprietà 'textContent' molto usata - in modo che il binding a queste proprietà determini anche che il DOM venga aggiornato. –

Problemi correlati