Czym jest dyrektywa AngularJS?

Spędziłem sporo czasu czytając dokumentację AngularJS i kilka samouczków i byłem całkiem zaskoczony, jak niedostępna jest dokumentacja.

Mam proste, odpowiedzialne pytanie, które może być również przydatne dla innych, którzy chcą odebrać AngularJS:

Czym jest dyrektywa AngularJS?

Powinna być gdzieś prosta, precyzyjna definicja dyrektywy, ale strona internetowa AngularJS oferuje te zaskakująco bezużyteczne definicje:

Na stronie głównej :

Dyrektywy są unikalną i potężną funkcją dostępną w AngularJS. Dyrektywy pozwalają na wymyślenie nowej składni HTML, specyficznej dla Twojej aplikacji.

W dokumentacji programisty :

Dyrektywy są sposobem na nauczenie HTML nowych sztuczek. Podczas kompilacji DOM dyrektywy są dopasowywane do HTML i wykonywane. Pozwala to dyrektywom rejestrować zachowanie lub przekształcać DOM.

I jest seria rozmów o dyrektywach, które, jak na ironię, wydają się zakładać, że publiczność już rozumie, czym są.

Czy ktoś mógłby podać, dla jasnego odniesienia, dokładną definicję tego, co wyjaśnia dyrektywa:

    W przeciwieństwie do jQuery, jQuery nie jest używane do tworzenia kopii zapasowych.]}
  1. jakie praktyczne problemy i sytuacje ma się zająć
  2. jaki to wzór projektowy uosabia, lub alternatywnie, jak pasuje do rzekomej MVC/{42]}MVW misji AngularJS.
Author: Xufox, 2012-12-14

5 answers

Co to jest (Zobacz jasną definicję jQuery jako przykład)?

Dyrektywa jest zasadniczo funkcją jest wykonywany, gdy kompilator Angular znajdzie go w DOM. Funkcja(Y) może zrobić prawie wszystko, dlatego myślę, że raczej trudno jest zdefiniować, czym jest dyrektywa. Każda dyrektywa ma swoją nazwę (np. ng-repeat, tabs, make-up-your-own) I KAŻDA dyrektywa określa gdzie może być użyta: element, atrybut, klasa, w skomentuj.

dyrektywa zwykle ma tylko funkcję (post)link. Skomplikowana dyrektywa może mieć funkcję kompilacji, funkcję pre-link i funkcję post-link.

Jakie praktyczne problemy i sytuacje ma się zająć?

Najpotężniejszą rzeczą, jaką dyrektywy mogą zrobić, jest rozszerzenie HTML. Twoje rozszerzenia są językiem specyficznym dla domeny (DSL) do budowania Twojej aplikacji. Np. jeśli Twoja aplikacja prowadzi zakupy online witryna, możesz rozszerzyć HTML, aby mieć "koszyk na zakupy"," kupon"," promocje " itp. dyrektywy -- jakiekolwiek słowa, obiekty lub pojęcia są bardziej naturalne w domenie "zakupy online", a nie " div " I "span" (jak już wspomniałem @ WTK).

Dyrektywy mogą również komponować HTML -- grupować kilka HTML w jakiś komponent wielokrotnego użytku. Jeśli używasz ng-include do ściągania dużej ilości kodu HTML, prawdopodobnie nadszedł czas na refaktoring do dyrektyw.

Jaki projekt wzór czy to ucieleśnia, lub alternatywnie, jak to pasuje do w 2012 roku w mieście działało 1000 głosicieli.]}

Dyrektywy służą do manipulowania DOM i przechwytywania zdarzeń DOM. Z tego powodu zarówno funkcje kompilacji jak i łącza dyrektywy otrzymują" element " jako argument. Możesz

    W tym celu należy utworzyć szablon HTML, który będzie zastępował dyrektywę.]}
  • przypisywanie zdarzeń do tego elementu (lub jego dzieci)
  • Dodaj / usuń klasę
  • Zmień wartość text ()
  • obserwuj zmiany atrybutów zdefiniowanych w tym samym elemencie (w rzeczywistości to wartości atrybutów są obserwowane-są to właściwości zakresu, stąd dyrektywa obserwuje "model" zmian)
  • itd.


W HTML mamy takie rzeczy jak <a href="...">, <img src="...">, <br>, <table><tr><th>. Jak opisałbyś czym są a, href, img, src, br, table, tr i th? Na tym polega dyrektywa.
 135
Author: Mark Rajcok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-16 04:04:33

Może naprawdę prosta i początkowa definicja dyrektyw kątowych byłaby

Dyrektywy AngularJS (ng-directives) są atrybutami HTML z prefiksem ng (ng-model, ng-app, ng-repeat, ng-bind) używanymi przez Angular do rozszerzenia HTML. ( from: W3Schools angular tutorial )

Przykładem tego może być

Dyrektywa ng-app definiuje aplikację AngularJS.

Dyrektywa ng-model wiąże wartość kontrolek HTML (wejście, wybierz, textarea) do danych aplikacji.

Dyrektywa ng-bind wiąże dane aplikacji z widokiem HTML.

<div ng-app="">
    <p>Name: <input type="text" ng-model="name"></p>
    <p ng-bind="name"></p>
</div>

Sprawdź ten tutorial , przynajmniej dla mnie był to jeden z najlepszych wstępów do Angular. Bardziej kompletnym podejściem byłoby wszystko, co powiedział wcześniej @mark-rajcok.

 10
Author: jplozgom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-10 07:16:44

Patrząc na dokumentację, dyrektywy są strukturami można napisać, że angularjs parsuje w celu tworzenia obiektów i behaviors.In innymi słowy jest to szablon, w którym używasz mieszania dowolnych węzłów i pseudo-javascript i elementów zastępczych dla danych, aby wyrazić intencje jak Twój widżet (komponent) jest zorganizowany, jak się zachowuje i jak jest feed z danymi. Angularjs następnie działa przeciwko tym dyrektywom , aby przetłumaczyć je na działający html/javascript kod.

Dyrektywy są po to, aby można było budować bardziej złożone komponenty (widżety) przy użyciu odpowiedniej semantyki. Wystarczy spojrzeć na przykład dyrektyw angularjs-definiują one panel tabulacji (co oczywiście nie jest poprawne w zwykłym HTML). Jest to bardziej intuicyjne niż używanie div-s lub spans do tworzenia struktury, która jest następnie stylizowana na wyglądającą jak Panel tabulacji.

 4
Author: WTK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-14 09:15:44

W angularjs dyrektywy są znacznikami HTML dla elementu HTML DOM, takiego jak atrybut (restrict-A), nazwa elementu(restrict - E), komentarz(restrict - M) lub klasa CSS(restrict - C), które mówią kompilatorowi HTML ($compile) AngularJS, aby wykonał określone zachowanie dla tego elementu DOM lub nawet przekształcił element DOM i jego dzieci.Przykładami są ng-bind, ng-hide/show itp.

 3
Author: Vivek Panday,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-14 06:48:33

Strona główna jest bardzo jasne o tym: Po najechaniu kursorem na karty w ostatniej sekcji:

Rozszerzyliśmy słownictwo HTML o niestandardowe tabs element. tabs abstrakcja złożonej struktury HTML oraz zachowanie niezbędne do renderowania kart. Rezultatem jest więcej czytelny widok i bardzo łatwa składnia wielokrotnego użytku."

Następnie w następnej zakładce:

angular.module('components', []).
  directive('tabs', function() {
    return {
      restrict: 'E',
      transclude: true,
      scope: {},
      controller: function($scope, $element) {
        var panes = $scope.panes = [];

        $scope.select = function(pane) {
          angular.forEach(panes, function(pane) {
            pane.selected = false;
          });
          pane.selected = true;
        }

Więc możesz wymyślać elementy html tzn. tabs i pozwolić angular zająć się renderowaniem tych żywioły.

 2
Author: raam86,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-14 09:13:15