Задать вопрос

Биндинг модели директивы к данным сервиса, которые загружаются асинхронно

Пытаюсь привязать модель кастомной директивы к данным сервиса. Проблема в том, что при обновлении данных сервиса по таймауту или в колбеке ajax-запроса модель директивы не обновляется.

Пример: codepen.io/snater/pen/IjvFa

И код:
<div ng-app="asyncServiceTest" ng-controller="testController">
    <bind-to-service></bind-to-service>
</div>


app = angular.module "asyncServiceTest", []

app.directive "bindToService", ["dataService", (dataService) ->
    restrict: "E"
    scope: {}
    template: "<div>{{ test }}</div>"
    link: (scope) ->
        scope.test = dataService.test
]

app.factory "asyncService", ["dataService", "$timeout", (dataService, $timeout) ->
    load: ->
        dataService.test = "SYNC DATA!"  # Works fine

        $timeout ->
            dataService.test = "ASYNC DATA!" # Doesn't work ((
        , 2000
]

app.factory "dataService", ->
    test: "Init Data"

app.controller "testController", ["$scope", "asyncService", ($scope, asyncService) ->
    asyncService.load()
]


Может я нарушаю какие-то концепции angular и так работать не должно? Спасибо.
  • Вопрос задан
  • 2733 просмотра
Подписаться 3 Оценить Комментировать
Решения вопроса 1
@snater Автор вопроса
Все стало понятно. Контроллер запускается до директивы и в момент инициализации модели status в dataService.test уже находится строка «SYNC DATA!» (я же подумал, что сработал биндинг). А строка «ASYNC DATA!» не записалась в модель потому, что я попытался забиндиться на примитив, если dataService.test будет объектом все отработает как положенно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽