można przekazywać argumenty do dyrektywy niestandardowego, jak to zrobić z wbudowanych skośnych dyrektyw - określając atrybut na Dyrektywie-elementu:
angular.element(document.getElementById('wrapper'))
.append('<directive-name title="title2"></directive-name>');
Musisz tylko zdefiniować scope
(łącznie z argumentem (parametrami)/parametrem (parametrami)) w fabrycznej funkcji dyrektywy. W poniższym przykładzie dyrektywa przyjmuje parametr title
. Następnie można użyć, na przykład w template
, stosując regularną skośnych sposób: {{title}}
app.directive('directiveName', function(){
return {
restrict:'E',
scope: {
title: '@'
},
template:'<div class="title"><h2>{{title}}</h2></div>'
};
});
zależności od sposobu/co chcesz związać, masz różne opcje:
=
jest wiązanie
@
dwukierunkowy prostu odczytuje wartość (wiążącego w jedną stronę)
&
służy do funkcji powiązać
W niektórych przypadkach możesz użyć nazwy "zewnętrznej", która różni się od nazwy "wewnętrznej". Z zewnętrzną mam na myśli nazwę atrybutu na elemencie dyrektywy, a wewnętrzną mam na myśli nazwę zmiennej, która jest używana w zakresie dyrektywy.
Na przykład, jeśli przyjrzymy się powyższej dyrektywie, możesz nie chcieć określać innego, dodatkowego atrybutu tytułu, nawet jeśli wewnętrznie chcesz pracować z właściwością title
. Zamiast chcesz użyć dyrektywy w następujący sposób:
<directive-name="title2"></directive-name>
Można to osiągnąć przez podanie nazwy za powyższej opcji w definicji zakres:
scope: {
title: '@directiveName'
}
Należy również pamiętać następujące rzeczy:
- Specyfikacja HTML5 mówi, że niestandardowe atrybuty (w zasadzie to, co jest wszędzie w aplikacjach Angular), należy poprzedzić prefiksem
data-
. Angular obsługuje to przez usunięcie prefiksu data-
z dowolnych atrybutów. Tak więc w powyższym przykładzie możesz określić atrybut na elemencie (data-title="title2"
) i wewnętrznie wszystko będzie takie samo.
- Atrybuty elementów występują zawsze w postaci
<div data-my-attribute="..." />
, natomiast w kodzie (np. Właściwości w obiekcie zakresu) mają one postać myAttribute
. Straciłem dużo czasu, zanim zdałem sobie z tego sprawę.
- Aby uzyskać inne podejście do wymiany/udostępniania danych między różnymi komponentami kątowymi (kontrolerami, dyrektywami), warto rzucić okiem na usługi lub kontrolery dyrektyw.
- można znaleźć więcej informacji na temat Angular homepage (directives)
Czy możesz to wyjaśnić? – Tamb
Co z dyrektywami, które są ograniczone: Atrybut znaczenia –
@eranotzap Ogranicza dyrektywę do użycia tylko jako _attribute_. – Aivus