2014-03-29 4 views
0

AngularJS를 처음 사용하고 컨트롤러가 동일한 유형의 여러 모델에 연결할 수있는 MVC 응용 프로그램을 만들려고합니다.AnglesJS에서 모델에서 컨트롤러로 데이터 asynchrone을 반환하는 방법

그래서 : 모델은 서버에서 (JSON) 정보를 검색 할 HTTP 프로토콜을 사용

function TestController($scope, Test) 
{ 
    $scope.model = {}; 

    $scope.load : function(id) { 
     Test.get($scope, id); 
    } 
} 

:

나는 같은 비동기 정보를 얻기 위해 테스트 모델에 연결하는 컨트롤러를 만들 . 모델은 다음과 같습니다.

myApp.factory('Test',function($http) { 
    get : function(variable, id) { 
     $http({ 
      url: 'api/load/'+id 
     }).success(function(response) { 
      variable.model = response;  
     }); 
    } 
}); 

'모델'이라는 이름이 컨트롤러에 고정되어 있습니다. 따라서 컨트롤러에 두 번째 테스트 모델 인 을로드 할 수있는 방법이 없습니다. 기존 모델이 덮어 쓰여지기 때문입니다.

Test.get($scope, id); 

Test.get($scope.model, id); 

하고

 variable = response; 

에 모델 각도 정지의 마법 : 나는 라인을 변경하는 경우

. 모델이 컨트롤러에서 업데이트되지 않습니다. byRef 이 자바 스크립트에 없습니다.

하나의 컨트롤러에서 여러 번 모델을 사용할 수있는 임시 해결책이 있습니까?

답변

2

글쎄, 당신은 이런 식으로 서비스를 호출 할 필요가 없습니다. 우선, $ http 호출은 'then'콜백을 사용하여 처리 할 수있는 약속을 반환합니다. 따라서 유사한 호출에 대해 여러 개의 다른 콜백을 추가 할 수 있습니다. 귀하의 경우 :

myApp.factory('Test',function($http) { 
    get : function(id) { 
     return $http({ 
      url: 'api/load/'+id 
     }); 
    } 
}); 

그리고 컨트롤러에서 것은 :

myApp.factory('Test',function($http) { 
    get : function(context, variable, id) { 
     return $http({ 
      url: 'api/load/'+id 
     }).success(function(result) { 
      context[variable] = result; 
     }); 
    } 
}); 

그리고 당신의 컨트롤러 :

function TestController($scope, Test) { 
    $scope.model = {}; 

    $scope.load : function(id) { 
     Test.get(id).then(function(result) { 
      $scope.var1 = result; 
     }); 

     Test.get(id).then(function(result) { 
      $scope.var2 = result; 
     }); 
    } 
} 

또 다른 방법은 다음과 같이하는 것입니다

function TestController($scope, Test) { 
    $scope.model = {}; 

    $scope.load : function(id) { 
     Test.get($scope, 'var1', id); 
     Test.get($scope, 'var2', id); 
    } 
} 
+0

감사합니다 그게 내가 찾고 있던거야. 방법을 더 쉽게 읽을 수있게 해줍니다. – Toxus