Есть три вещи, которые потребуют, чтобы реализовать эту функциональность:
- AngularJS Шаблон а.к.а. разметки для отображения цитаты с изображением рядом с ним.
- Услуга AngularJS для включения вызова REST для извлечения вышеуказанных данных с сервера.
- Контроллер AngularJS для использования службы AngularJS для подачи данных назад шаблона (точка 1), чтобы обновить его после каждого остального вызова.
Таким образом, вы можете достичь этого, даже не указав директиву AngularJS, но что делать, если вам нужно повторить одну и ту же функцию во многих местах. В этом смысле вам, вероятно, придется копировать один и тот же шаблон где-то еще, что снова понадобится отдельному контроллеру для использования одной и той же службы (поскольку использование одного и того же контроллера несколько раз в DOM не рекомендуется и неправильная практика).
С директивой API вы можете поместить разметку в шаблон директивы и использовать службу в директивном контроллере для визуализации пользовательского интерфейса. Итак, в следующий раз, если вам нужен несколько экземпляров виджета, вам просто нужно ввести директиву, вот и все - отдых будет работать без каких-либо проблем.
App = angular.module('App', []);
App.directive('welcomeQuote', function(QuoteService) {
return {
restrict: 'E',
template: '<div><img ng-src="{{quote.img}}" /><span ng-bind="quote.title"></span></div>',
controller: function(scope) {
// returns {img: 'angular.png', title: 'AngularJS';
QuoteService.fetch().then(function(data) {
scope.quote = data;
});
}
}
});
App.factory('QuoteService', function($http) {
return function() {
fetch: function() {
return $http.get('http://quote-server.com/new')
}
};
});
Наконец, вы можете использовать виджет как:
<welecome-quote></welcome-quote>
Ее в конечном счете, зависит от вас и как вы архитектор приложения. Я рисую строку, когда я требую, чтобы компонент ui был директивой, когда я использую его в нескольких местах.Как только то же самое дублируется, его более СУХОЙ, чтобы включить этот компонент в директиву. – agconti
Ввод кода в директиву также означает, что вы можете написать тесты для логики, которые манипулируют DOM. Например, у вас есть шаблон, связанный с контроллером. В этом шаблоне вы условно применяете класс или показываете/скрываете элемент. Вы не можете проверить, что эти вещи применяются/отображаются в контроллере. Но вы можете с директивой. Если в вашем шаблоне много логики, может быть полезно или даже важно проверить, что все работает так, как ожидалось. –
Спасибо, ребята, за ваш ценный вклад. Я не слишком много делал с модульными тестами javascript, поэтому это определенно большой плюс, чтобы директивы упрощали тестирование. –