Как лучше предоставлять данные директиве AngularJS?

Здравствуйте!

Вопрос больше из разряда "Best Practices". Нужно написать директиву на AngularJS. Директива простая - input, под ним строка текста с некими данными и кнопка. Данные получаются с сервера, по нажатию кнопки на сервер отправляется содержимое input'a.
Вопрос:
Куда вынести логику получения данных с сервера?

Можно сделать все внутри директивы в link и controller, а можно передать данные в директиву извне и логику, соответственно реализовывать каждый раз независимо от директивы.

Спасибо.
  • Вопрос задан
  • 3629 просмотров
Решения вопроса 1
icelaba
@icelaba
Знаю и умею всё
Так код понятнее my-dir data-my-text="myText" data-my-model="myModel"
он уже подводит к мысли что директива непростая,
меняет модель и тп.
А раз код дает дополнительное знание или намек на это знание,
то значит такой код лучше.

В плане реюзабельности простых директив - очень часто они одноразовые - поэтому на эту тему я бы заморачивался меньше всего.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
icelaba
@icelaba
Знаю и умею всё
Вообще по best practices вся отправка и получение данных выносится в отдельные сервисы :-) я такие сервисы храню например в отдельной папке resources (не только я)
Директива при определении в шапке указывает зависимость от этого сервиса
angular.module('directive_mod_blabla', ['resources.blabla']).
По похожему принципу сделаны эталонный https://github.com/angular-app/angular-app
(взаимодействие чз client/vendor/mongolab/mongolab-resource.js)
Дальше можно много слов про тестирование, angular way, бла бла, и тп но это можно и на сайте ангуляр почитать

Не по best practice просто цепляете модулю зависимость от 'ngResource'
передаете ['$resource', function($resource)
и используете
var blabla_resource = $resource('/blabla/:blabla_id', {blabla_id:'@blabla_id'})
.....
blabla_resource.get({blabla_id:blabla_id}).$promise
.then(function(res){})
Для кучи мелких задач такой подход ничуть не хуже
Ответ написан
Комментировать
@dmitrytut Автор вопроса
Спасибо.
Сейчас у меня как раз сделано так, что логика взаимодействия с сервером вынесена в отдельный сервис, а в директиву я его "инжектю".
Сейчас, перечитав вопрос, понял, что задал не то, что хотел...
Истинный вопрос не про логику взаимодействия с сервером, а про логику предоставления данных директиве вообще!!!
В конкретном, частном случае данные получаются с сервера, т.е. вопрос:
Как лучше - получать данные внутри директивы и использовать ее просто:
<my-dir/>
Или, все таки, оставить получение данных на откуп того, кто будет пользоваться директивой, а данные в директиву передавать через атрибуты:
<my-dir data-my-text="myText" data-my-model="myModel"></my-dir>


Извините, за неточность в постановке вопроса, вопрос отредактирован.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы