Dyrektywy AngularJS
AngularJS pozwala rozszerzyć HTML o nowe atrybuty zwane dyrektywami .
AngularJS ma zestaw wbudowanych dyrektyw, które oferują funkcjonalność Twoim aplikacjom.
AngularJS pozwala również zdefiniować własne dyrektywy.
Dyrektywy AngularJS
Dyrektywy AngularJS to rozszerzone atrybuty HTML z przedrostkiem ng-
.
Dyrektywa ng-app
inicjuje aplikację AngularJS.
Dyrektywa ng-init
inicjuje dane aplikacji.
Dyrektywa ng-model
wiąże wartość kontrolek HTML (input, select, textarea) z danymi aplikacji.
Przeczytaj o wszystkich dyrektywach AngularJS w naszej dokumentacji dotyczącej dyrektyw AngularJS .
Przykład
<div ng-app="" ng-init="firstName='John'">
<p>Name: <input type="text" ng-model="firstName"></p>
<p>You wrote: {{ firstName }}</p>
</div>
Dyrektywa ng-app
mówi również AngularJS, że element <div> jest „właścicielem” aplikacji AngularJS.
Wiązanie danych
Wyrażenie {{ firstName }}
w powyższym przykładzie jest wyrażeniem powiązania danych AngularJS.
Powiązanie danych w AngularJS wiąże wyrażenia AngularJS z danymi AngularJS.
{{ firstName }}
jest związany z ng-model="firstName"
.
W następnym przykładzie dwa pola tekstowe są powiązane razem z dwiema dyrektywami ng-model:
Przykład
<div ng-app="" ng-init="quantity=1;price=5">
Quantity: <input type="number" ng-model="quantity">
Costs: <input type="number" ng-model="price">
Total in dollar: {{ quantity * price }}
</div>
Używanie ng-init
nie jest zbyt powszechne. Jak inicjować dane dowiesz się z rozdziału o kontrolerach.
Powtarzające się elementy HTML
Dyrektywa ng-repeat
powtarza element HTML:
Przykład
<div ng-app="" ng-init="names=['Jani','Hege','Kai']">
<ul>
<li ng-repeat="x in names">
{{ x }}
</li>
</ul>
</div>
Dyrektywa ng-repeat
faktycznie klonuje elementy HTML
raz dla każdego elementu w kolekcji.
Dyrektywa ng-repeat
użyta na tablicy obiektów:
Przykład
<div ng-app="" ng-init="names=[
{name:'Jani',country:'Norway'},
{name:'Hege',country:'Sweden'},
{name:'Kai',country:'Denmark'}]">
<ul>
<li ng-repeat="x in names">
{{ x.name + ', ' + x.country }}
</li>
</ul>
</div>
AngularJS jest idealny dla aplikacji bazodanowych CRUD (Create Read Update Delete).
Wyobraź sobie, że te obiekty byłyby rekordami z bazy danych.
Dyrektywa dotycząca aplikacji
Dyrektywa ng-app
definiuje główny element aplikacji AngularJS.
Dyrektywa ng-app
automatycznie załaduje (automatycznie zainicjuje) aplikację po załadowaniu strony internetowej.
Dyrektywa Cieplna
Dyrektywa ng-init
definiuje początkowe wartości dla aplikacji AngularJS.
Normalnie nie będziesz używać ng-init. Zamiast tego użyjesz kontrolera lub modułu.
Więcej o kontrolerach i modułach dowiesz się później.
Dyrektywa modelowa
Dyrektywa ng-model
wiąże wartość kontrolek HTML (input, select, textarea) z danymi aplikacji.
Dyrektywa ng-model
może również:
- Podaj walidację typu danych aplikacji (numer, adres e-mail, wymagane).
- Podaj stan danych aplikacji (nieprawidłowe, brudne, dotknięte, błąd).
- Podaj klasy CSS dla elementów HTML.
- Powiąż elementy HTML z formularzami HTML.
Przeczytaj więcej o ng-model
dyrektywie w następnym rozdziale.
Twórz nowe dyrektywy
Oprócz wszystkich wbudowanych dyrektyw AngularJS możesz tworzyć własne dyrektywy.
Za pomocą .directive
funkcji tworzy się nowe dyrektywy.
Aby wywołać nową dyrektywę, utwórz element HTML z taką samą nazwą znacznika jak nowa dyrektywa.
Nazywając dyrektywę, musisz użyć nazwy wielbłąda
w3TestDirective
, ale przy jej wywoływaniu musisz użyć -
oddzielnej nazwy, w3-test-directive
:
Przykład
<body ng-app="myApp">
<w3-test-directive></w3-test-directive>
<script>
var app = angular.module("myApp", []);
app.directive("w3TestDirective",
function() {
return {
template : "<h1>Made by a directive!</h1>"
};
});
</script>
</body>
Dyrektywę można wywołać za pomocą:
- Nazwa elementu
- Atrybut
- Klasa
- Komentarz
Wszystkie poniższe przykłady dadzą ten sam wynik:
Nazwa elementu
<w3-test-directive></w3-test-directive>
Atrybut
<div w3-test-directive></div>
Klasa
<div class="w3-test-directive"></div>
Komentarz
<!-- directive: w3-test-directive -->
Ograniczenia
Możesz ograniczyć swoje dyrektywy do wywoływania tylko przez niektóre metody.
Przykład
Dodając restrict
właściwość o wartości "A"
, dyrektywa może być wywołana tylko przez atrybuty:
var app = angular.module("myApp", []);
app.directive("w3TestDirective",
function() {
return {
restrict : "A",
template : "<h1>Made by a directive!</h1>"
};
});
Prawne wartości graniczne to:
E
dla nazwy elementuA
dla atrybutuC
dla klasyM
dla komentarza
Domyślną wartością jest EA
, co oznacza, że zarówno nazwy elementów, jak i nazwy atrybutów mogą wywoływać dyrektywę.