@abusabir

Angular: как получить данные из контроллера собственной директивы?

Что-то я запутался. Переписываю чей-то страшный код на angular и суть вопроса вот в чём.
Есть своя директива, со своим шаблоном, со своими
...
controllerAs: 'startPoint',
            controller: function($scope, $element, routePointInit) {
                $scope.point = {
                    isDisabled: false,
                    address: '',
                    input: $element[0].querySelector('input')
                };
                routePointInit($scope.point.input);
            },


В шаблоне директивы есть указание
ng-model="point.address"

При этом попытки получить извне доступ через
startPoint.point.address

Например, при простом {{startPoint.point.address}} даже

ни к чему не приводят.
В чём может быть дело?
  • Вопрос задан
  • 460 просмотров
Решения вопроса 1
miraage
@miraage
Старый прогер
В данном случае, controllerAs создает переменную 'startPoint' в текущем scope директивы.
Если scope директивы изолирован или новый (scope: {} или scope: true} - тогда извне переменная не будет доступна.
В любом случае, директива - самодостаточная единица, и если Вам в другом месте приложения надо получить ее данные - неверно продумано приложение.
Если выхода нет - остаётся использовать сервисы/фабрики, которые по опредленным ключам будут хранить у себя данные, к которым будет доступ в остальных точках приложеня.

// EDIT

1) Директива не должна никому ничего давать. В основном, её обязанность - произвести некую манипуляцию с данными и отобразить это в представлении.

2) Использование $scope/$element в контроллере - моветон. Все DOM операции должны происходить в link-функции директивы. Если сложная логика - это всё выносится в сервисы (в которых, собственно, и должна храниться вся бизнес-логика приложения).

3) Попробуйте заменить $scope на this в коде. Почитайте внимательно про controllerAs syntax.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sHinE
@sHinE
веб-разработчик, php/js/mysql и сопутствующее
Насколько помню, в параметрах директивы используется ключ scope в котором указывается объект, регулирующий как будет работать биндинг параметров директивы - односторонний/двусторонний и т.п.
habrahabr.ru/post/180365
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы