2013-05-22 2 views
2

Google 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]; 
} 

그러나 컨트롤러 업데이트도 나머지의 API에서 데이터로드 (내가 돌아 오는 데이터를 로그인 한 경우, 그리고 그것은 분명히).

답변

8

: 같은 배열을 채 웁니다 대신

data.messages = messages 

사용 angular.copy() :

angular.copy(messages, data.messages) 

그런 식으로, 컨트롤러 업데이트를 볼 수 있습니다.

+0

감사합니다. 짐작할 수없는! –

+0

작동! 시간이 많이 들었어. – Ruwen

0

문제는 각 컨트롤러에 data의 다른 버전을 반환한다는 것입니다. 나는 $ rootScope에 messages을 넣을 것이다. 그래서

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

덧붙여, var messages-data.rest.query의 반환 값을 설정하는 목적은 무엇인가? 이 변수는 함수를 떠나는 순간 즉시 끊어집니다. 대신이 같은 data.messages에 새로운 배열을 할당

관련 문제