2013-03-05 12 views
11

Kod angularjs:Dlaczego nie mogę uzyskać wartości atrybutu mojej dyrektywy niestandardowej?

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

Można zobaczyć tam jest scope: { myId: '@' } w dyrektywie.

I kod html:

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

Widać ja zdefiniował my-id='123'.

Mam nadzieję, że dyrektywa ostrzeże 123, ale ostrzeże ona undefined. Gdzie jest mój błąd?

PS: tutaj jest na żywo demo: http://plnkr.co/edit/sL69NqWC70Qfwav5feP2?p=preview

Odpowiedz

11

Trzeba $observe atrybutów (jak opisano w sekcji „Atrybuty” z http://docs.angularjs.org/guide/directive), aby uzyskać prawidłowe wartości interpolowane atrybutów.

Oto upadać pracy: http://plnkr.co/edit/NtIHmdoO7IAEwE74ifB5?p=preview

ta jest zasadniczo duplikat angularjs : logging scope property in directive link function displays undefined. Należy również zauważyć, że PR https://github.com/angular/angular.js/pull/1555 został niedawno połączony, a twój plunker powinien działać bez użycia $observe w przyszłych wersjach AngularJS.

-

Demo mowa przerabia w najnowszej wersji: 1.1.3, można spróbować (i zmienić angularjs url do 1.1.3).

+0

to działa na najnowszej wersji: 1.1.3, dziękuję i PrimosK, to jest naprawdę mylący problem :) – Freewind

+1

Testowałem twój plunk, pracował. Przetestowano w kanciarze 1.2.23: "Nieznany dostawca: iAttrsProvider" – BigDong

Powiązane problemy