2013-05-22 3 views
2

У меня есть две угловые службы, которым необходимо поделиться моделями (список сообщений и отдельное сообщение), которые они получают от вызова нашего API. Услуга заключается в следующем:Обмен динамическими данными между двумя контроллерами с сервисом AngularJS

angular.module('CmServices', ['ngResource']) 
.factory('Messages', function ($resource, $routeParams, $rootScope) { 

    var data = {}; 

    data.rest = $resource(url, {}, { 
      query: {method:'GET', params: params}, 
      post: {method:'POST', params: params} 
     }); 

    // Trying to set this through a call to the API (needs to get param from route) 
    $rootScope.$on('$routeChangeSuccess', function(event, current, previous) { 
      var messages = data.rest.query({m_gid: $routeParams.gid}, function() { 
       data.messages = messages; 
      }); 
    }); 

    return data;  
}); 

и контроллеры:

function MessagesCtrl ($scope, $http, $location, $routeParams, Messages) { 
    $scope.messages = Messages.messages; 
} 

function MessageCtrl ($scope, $http, $location, $routeParams, Messages) { 
    $scope.messages = Messages.messages[0]; 
} 

Но ни обновления контроллеров при загрузке данных из REST API (я вошли данные возвращаются, и это определенно делает).

ответ

8

Вместо того, чтобы назначить новый массив data.messages, как это:

data.messages = messages 

использование angular.copy() вместо этого, который заполнит тот же массив:

angular.copy(messages, data.messages) 

Таким образом, контроллеры будут видеть обновление.

+0

Спасибо !!! невозможно угадать! –

+0

Работает! Это стоило мне часов ... – Ruwen

0

Проблема в том, что вы возвращаете другую версию data для каждого контроллера. Я бы разместил messages в $ rootScope. Так

data.rest.query({m_gid: $routeParams.gid}, function() { 
      $rootScope.messages = messages; 
     }); 

Кстати, какова цель создания возвращаемого значения data.rest.query в var messages? Эта переменная вылетает, как только вы покидаете функцию.

Смежные вопросы