Я попытаюсь объяснить с точки зрения высокого уровня, вдохновленной этой статьей (Angular 2: Разница между компонентами и директивами). Он говорит об Angular 2, но также полезен в контексте AngularJs.
Директивы
В компьютерных науках есть понятие «директивная прагма». Согласно Википедии:
«В компьютерном программировании директивная прагма (от «прагматический») — это языковая конструкция, которая указывает, как компилятор (или ассемблер, или интерпретатор) должен обрабатывать вводимые данные. Директивы не являются частью собственно языка».
Это хорошо согласуется с описанием, данным документами AngularJS:
«На высоком уровне директивы — это маркеры элемента DOM (например, атрибута, имени элемента, комментария или класса CSS), которые сообщают компилятору HTML AngularJS ($compile) прикрепить указанное поведение к этому элементу DOM (например, через прослушиватели событий). ) или даже для преобразования элемента DOM и его дочерних элементов».
Итак, что в основном делают директивы, так это дают инструкции (Angular) компилятору, чтобы изменить DOM или его поведение.
Компоненты
Компоненты в AngularJS — это специальная директива; они пытаются имитировать веб-компоненты, как указано в документации AngularJS:
В AngularJS Компонент — это особый тип директивы, использующий более простую конфигурацию, подходящую для структуры приложения на основе компонентов.
Это упрощает написание приложения аналогично использованию веб-компонентов или использованию нового стиля архитектуры приложения Angular.
Когда что использовать?
Лично я использую компоненты, если нет веской причины не делать этого.
Некоторые из этих причин приведены в документах AngularJS для компонентов:
- для директив, которые должны выполнять действия в функциях компиляции и предварительной компоновки, потому что они недоступны
- когда вам нужны расширенные параметры определения директив, такие как приоритет, терминал, многоэлементный
- когда вам нужна директива, которая запускается атрибутом или классом CSS, а не элементом
Другой способ выразить это:
Директивы — это механизм, с помощью которого мы можем привязать поведение к элементам в DOM.
Компоненты — это особый тип директив, который позволяет использовать функциональные возможности веб-компонентов — инкапсулированные повторно используемые элементы, доступные в нашем приложении.
Возможный вывод
Я думаю, что вопрос не так уж хорош, если вы понимаете, что компонент — это директива. Эти две концепции не пытаются решить одну и ту же проблему. Компоненты — это скорее расширение, которое позволяет использовать директивы для создания веб-приложений на основе компонентов.
Углубление
Тодд Мотто делится своими знаниями по этой теме в этом небольшом GIST.
Директива украшает DOM, добавляет поведение и расширяет существующий DOM. Когда вы используете .component(), вы создаете DOM, когда вы используете .directive(), вы украшаете DOM, это образ мышления
person
Flip
schedule
17.04.2019