@akamoroz

[AngularJS] связь между данными сервиса и контроллера

В процессе разработки возникли проблемы со связностью ссылок между сервисом и контроллером.
Сейчас объясню на примере:

// Есть сервис, в нем хранится id и другие данные.
app.service('testService', function ($http, serverURL, $timeout) {
    var self = this;
    self.data = {
        id: null,
        token: null,
        ....
    };
    self.initMe = function () {
        return $http({
            method: 'GET',
            url: serverURL + '/initMe/' + '?token=' + self.data.token
        });
    };
    return self;
});
meModule.controller('MeCtrl', function (...) {
    $scope.me = testService.data; // устанавливаем связь между scope и service

    $rootScope.$on('initMe', function (e, data) {

        testService.initMe().success(function (data, status, headers, config) {
            // data.result - object
            // $scope.me = data.result;         // не работает
            // или
            // meService.data = data.result;    // не работает

            meService.data = data.result;       //  
            $scope.me = meService.data;         // Всё ок - приходится восстанавливать связь между scope и service :(
        });
    });
}


Вопросы:
1. Почему мы теряем связь между scope и сервисом на строках $scope.me = data.result или meService.data = data.result;?
2. Мб есть другие, более красивые пути, обновления данных в сервисах с внешнего API(GET запросы)?
  • Вопрос задан
  • 4327 просмотров
Пригласить эксперта
Ответы на вопрос 1
Потому что testService.data и $scope.me — это разные ссылки. Если вы хотите, чтобы обе этих ссылки указывали на один и тот же объект, то обновляйте их обе.

Но зачем вам две ссылки? Просто поместите в $scope ссылку на ваш сервис и обновляйте данные только в нём.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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