2013-03-27 5 views
5

Ho un fenomeno molto strano con una direttiva e un ambito isolato, in cui gli attributi nello scope funzionano o non funzionano a seconda della denominazione dell'attributo. Se usoGli attributi dell'ambito della direttiva si interrompono in base al nome dell'attributo

{check:'@check'} 

funziona bene e come previsto. Tuttavia, se uso:

{checkN:'@checkN'} 

la funzione definita non viene mai assegnata. Un esempio potrebbe apparire come:

HTML:

<item ng-repeat="list_item in model.list" model="list_item" checkN="checkName()" check="checkName()" position="$index"></item>' 

Javascript

app.directive('item', function(){ 
    return { 
     restrict: 'E', 
     replace : false, 
     scope:{ 
       $index: '=position', 
       check: '&check', 
       checkN: '&checkN', 
       model:'=' 
     },   
     template: '', 
     link: function(scope, element, attrs){ 
     console.log(scope.check()) 
     console.log(scope.checkN())   
     } 
    } 
}); 

La consolle a questo punto mi danno la seguente:

The checkName function has been called [which is the return string of the function] 
undefined 

E 'davvero possibl e che dipende dall'uso delle lettere maiuscole? Questo sarebbe un comportamento molto "inaspettato".

Grazie per il vostro aiuto

schacki

+0

"Direttive hanno nomi cammello con carter come' ngBind' La direttiva può essere invocato traducendo il nome caso cammello in caso serpente con questi caratteri speciali ':..', '-', o' _' Opzionalmente la direttiva possa essere preceduto da 'x-' o 'data-' per renderlo conforme al validatore HTML. " - [Direttiva pagina] (http://docs.angularjs.org/guide/directive) sezione "Invocare le direttive da HTML" –

risposta

9

HTML è case insensitive, quindi myAttribute e myattribute sarebbero indistinguibili gli uni dagli altri a seconda del browser. Gli autori di Angularjs hanno preso una decisione progettuale sul passaggio da html a javascript e viceversa in termini di direttive.

ngRepeat direttiva utilizzata come ng-repeat nella vista (html). Allo stesso modo, la direttiva checkN deve essere utilizzata come check-n per il riconoscimento angolare come direttiva.

+1

Grazie mille per la risposta. Il team angolare lo ha documentato chiaramente per le direttive. Ma seguendo i documenti, non mi aspettavo lo stesso comportamento qui. – schacki

+1

@schacki Esattamente - nel mio caso ho avuto nomi di attributo che sono iniziati con un acronimo - ad es. DNSHost = "myhost" e Angular * li ignorarono silenziosamente * senza alcuna traduzione possibile. La documentazione non dice nulla a riguardo. Ho appena perso 2 ore :( –

Problemi correlati