Mam dyrektywę atrybutów ograniczoną w następujący sposób:
restrict: "A"
Muszę przekazać dwa atrybuty; numer i funkcję / wywołanie zwrotne, uzyskując do nich dostęp w ramach dyrektywy za pomocą attrs
obiektu.
Gdyby dyrektywa była dyrektywą elementarną, ograniczyłbym się "E"
do tego:
<example-directive example-number="99" example-function="exampleCallback()">
Jednak z powodów, którymi nie będę się poruszać, potrzebuję dyrektywy, aby była dyrektywą atrybutów.
Jak przekazać wiele atrybutów do dyrektywy atrybutu?
javascript
parameters
angularjs
attributes
directive
Nieuwaga
źródło
źródło
scope: false
), nowy zakres (z normalnym dziedziczeniem prototypowym, tj.,scope: true
) I zakres izolowany (tjscope: { ... }
.). Jaki zakres tworzy Twoja dyrektywa?Odpowiedzi:
Dyrektywa może uzyskać dostęp do dowolnego atrybutu zdefiniowanego w tym samym elemencie, nawet jeśli sama dyrektywa nie jest tym elementem.
Szablon:
Dyrektywa:
fiddle
Jeśli wartość atrybutu
example-number
zostanie zakodowana na stałe, sugeruję użycie$eval
raz i zapamiętanie wartości. Zmiennanum
będzie miała właściwy typ (liczbę).źródło
Robisz to dokładnie w taki sam sposób, jak w przypadku dyrektywy elementu. Będziesz je mieć w obiekcie attrs, moja próbka ma ich dwukierunkowe wiązanie za pośrednictwem zakresu izolowanego, ale nie jest to wymagane. Jeśli używasz zakresu izolowanego, możesz uzyskać dostęp do atrybutów za pomocą
scope.$eval(attrs.sample)
lub po prostu scope.sample, ale mogą one nie być zdefiniowane podczas łączenia w zależności od sytuacji.użyty jako:
źródło
Możesz przekazać obiekt jako atrybut i wczytać go do dyrektywy w następujący sposób:
źródło
{{true}}
ale nadal zwraca wartość ciągutrue
.To zadziałało dla mnie i myślę, że jest bardziej zgodne z HTML5. Powinieneś zmienić swój kod HTML tak, aby używał przedrostka „data-”
A w ramach dyrektywy odczytaj wartość zmiennej:
źródło
Jeśli „wymagasz” „exampleDirective” z innej dyrektywy + Twoja logika znajduje się w kontrolerze „exampleDirective” (powiedzmy „exampleCtrl”):
źródło