2013-03-05 9 views
11

Il codice angularjs:Perché non riesco a ottenere il valore dell'attributo della mia direttiva personalizzata?

app.directive('test', function(){ 
    return { 
    restrict: 'A', 
    scope: { 
     myId: '@' 
    }, 
    link: function(scope) { 
     alert(scope.myId); 
    } 
    } 
}); 

Si può vedere c'è un scope: { myId: '@' } nella direttiva.

E il codice html:

<div test my-id='123'></div> 

Si può vedere ho definito un my-id='123'.

Spero che la direttiva avviserà 123, ma ha avvisato undefined. Dov'è il mio errore?

PS: ecco un demo live: http://plnkr.co/edit/sL69NqWC70Qfwav5feP2?p=preview

risposta

11

È necessario $observe attributi (come descritto nella sezione "Attributi" di http://docs.angularjs.org/guide/directive) per ottenere il valore corretto di attributi interpolati.

Ecco un Plunk di lavoro: http://plnkr.co/edit/NtIHmdoO7IAEwE74ifB5?p=preview

Questo è essenzialmente duplicato della angularjs : logging scope property in directive link function displays undefined. Va inoltre notato che il PR https://github.com/angular/angular.js/pull/1555 è stato unito di recente e che il plunker dovrebbe funzionare senza utilizzare $observe nelle versioni future di AngularJS.

-

La demo in questione è lavorato in ultima versione: 1.1.3, si può provare (e cambiare l'url angularjs a 1.1.3).

+0

funziona sull'ultima versione: 1.1.3, grazie e PrimosK, questo è un problema davvero confuso :) – Freewind

+1

Ho testato il tuo plunk, ha funzionato. Testato nell'angolare 1.2.23: "Provider sconosciuto: iAttrsProvider" – BigDong

Problemi correlati