Что такое директива AngularJS?



Я провел довольно много времени, читая документацию AngularJS и несколько учебных пособий, и я был очень удивлен тем, насколько недоступна документация.



У меня есть простой, ответный вопрос, который также может быть полезен другим, кто хочет забрать AngularJS:



что такое директива AngularJS?



где-то должно быть простое, точное определение директивы, но сайт AngularJS предлагает эти удивительно бесполезные определения:



на главной странице:




директивы-это уникальная и мощная функция, доступная в AngularJS. Директивы позволяют изобретать новый синтаксис HTML, специфичный для вашего приложения.




на документация для разработчиков:




директивы-это способ научить HTML новым трюкам. Во время компиляции DOM директивы сопоставляются с HTML и выполненный. Это позволяет директивам регистрировать поведение или преобразовывать DOM.




и

644   5  

5 ответов:

что это такое (см. четкое определение jQuery в качестве примера)?

директива по существу является функцией это выполняется, когда угловой компилятор находит его в DOM. Функция(ы) может делать почти все, поэтому я думаю, что довольно сложно определить, что такое директива. Каждая директива имеет имя (например, ng-repeat, tabs, make-up-your-own), и каждая директива определяет, где она может быть использована: элемент, атрибут, класс, В a комментировать.

директива обычно имеет только функцию связи (post). Сложная директива может иметь функцию компиляции, функцию pre-link и функцию post-link.

какие практические проблемы и ситуации он призван решать?

самое мощное, что могут сделать директивы, это расширить HTML. Ваши расширения-это Домен Специфический Язык (DSL) для построения вашего приложения. Например, если ваш приложение запускает сайт онлайн-покупок, вы можете расширить HTML, чтобы иметь "корзину покупок", "купон", "специальные предложения" и т. д. директивы -- любые слова или объекты или понятия более естественны для использования в домене "интернет-магазины", а не"div "и"span" s (Как уже упоминалось @WTK).

директивы также могут компонентным подходом в HTML -- группы кучу HTML в некоторые повторно используемый компонент. Если вы обнаружите, что используете ng-include для извлечения большого количества HTML, вероятно, пришло время для рефакторинга директивы.

какой шаблон дизайна он воплощает, или, альтернативно, как он вписывается предполагаемая миссия MVC / MVW от angularjs

директивы, где вы манипулируете DOM и поймать DOM события. Вот почему функции compile и link директивы получают "элемент" в качестве аргумента. Вы можете

  • определите кучу HTML (т. е. шаблон), чтобы заменить директиву
  • привязать события к этому элемент (или его дочерние элементы)
  • добавить/удалить класс
  • изменить значение text ()
  • следите за изменениями атрибутов, определенных в том же элементе (на самом деле это значения атрибутов, которые наблюдаются-это свойства области, поэтому директива наблюдает за "моделью" для изменений)
  • etc.


В HTML у нас есть такие вещи, как <a href="...">,<img src="...">,<br>,<table><tr><th>. Как бы вы описали то, что, слишком, img, src, br, table, tr и т. д.? Вот что такое директива.

может быть, действительно простой и начальный определение угловых директив будет

директивы в AngularJS (НГ-директивы), являются HTML-атрибуты с префиксом НГ (НГ-модель и НГ-приложение, НГ-повторите, НГ-привязать) используется для угловой расширяет HTML. (от: W3schools угловой учебник)

некоторые примеры этого были бы

на ng-app директива определяет приложение AngularJS.

на ng-model директива связывает значение HTML-элементов управления (вход, select, textarea) к данным приложения.

на ng-bind директива связывает данные приложения с представлением HTML.

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

проверьте этот учебник, по крайней мере, для меня это было одно из лучших введений в Angular. Более полный подход будет все, что @mark-rajcok сказал раньше.

глядя на документацию, директивы-это структуры, которые вы можете написать, что angularjs анализирует для создания объектов и behaviors.In другими словами, это шаблон, в котором вы используете смесь любых произвольных узлов и псевдо-javascript и заполнителей для данных, чтобы выразить намерения о том, как ваш виджет (компонент) структурирован, как он ведет себя и как он подается с данными. Angularjs затем работает против тех директивы перевести их в рабочий html / javascript код.

директивы существуют, чтобы вы могли создавать более сложные компоненты (виджеты), используя правильную семантику. Просто взгляните на пример директив angularjs-они определяют панель вкладок (которая, конечно, не действительна в обычном HTML). Это более интуитивно, чем использование как div-s или spans для создания структуры, которая затем стилизуется в выглядеть панель вкладок.

В в AngularJS директивы в HTML повторного маркеров в HTML DOM-элемент, как атрибут(ограничения - а), имя элемента(ограничения - е), комментарий(ограничение - м) или CSS-класса(ограничения - С), что сказать в AngularJS HTML-код компилятора ($компиляции), чтобы выполнить указанное поведение тем, что DOM-элемент или даже превратить в дом элемента и его детей.Некоторые примеры-ng-bind, ng-hide/show и т. д.

Домашняя страница очень ясно об этом: При наведении указателя мыши на вкладки в последнем разделе:

мы расширили словарь HTML с помощью пользовательского tabs элемент. Элемент tabs абстрагирует сложную структуру HTML и поведение, необходимое для рендеринга вкладок. В результате получается больше читаемый вид и очень легко многоразовый синтаксис."

затем в следующей вкладке:

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;
        }

таким образом, вы можете изобрести html-элементы, т. е. tabs и пусть угловые обработайте отрисовку этих элементов.

Comments

    Ничего не найдено.