2014-03-04 2 views
0

각도 -Ui- 라우터를 사용하고 있으며 서비스를 통해 DB에서 일부 데이터를 가져 오는 해결 방법이 있습니다.앵글 -Ui 라우터의 미리 정의 된 컨트롤러에 서비스를 삽입하는 방법

이제 컨트롤러에 삽입하고 싶습니다.

하지만 내 컨트롤러는 내 응용 프로그램에있는 상태로 정의되어 있지 않습니다. 이 같은

이 Look :

.state('myState', { 
    url: "/create", 
    templateUrl: "views/create.html", 
    resolve: { 
     templates : function(templateService){ 
      return templateService.allMetadata.query({}, function(data){ 
      }, function(err){ 
      console.log(err); 
      }); 
     } 
    }, 
    controller: 'createCtrl' 

그래서 다른 곳에서 정의 된 내 createCtrl에 내 템플릿을 삽입하는 방법에 대해 설명합니다. 의존성 주입을하려고하면 createCtrl에서 작동하지 않습니다. 내 유일한 옵션은 내 컨트롤러를 state 속임수로 데칼링하는 것입니다. 이것은 분명히 매우 나쁘다.

모든 솔루션?

+0

templateService.allMetadata.query()가 비동기 인 경우 resolve 함수에서 약속을 반환해야합니다. 그런 다음 컨트롤러에 '템플릿'을 삽입하십시오. –

답변

1

비동기 작업에 대한 약속을 반환해야합니다. templateService.allMetadata.query()가 약속을 이미 반환하지 않는다고 가정하면 다음과 같이 시도해보십시오. 그런 다음 컨트롤러에 '템플릿'을 삽입하십시오.

약속을 반환하기 위해 수정할 수 있다면 그렇게하십시오.

.state('myState', { 
    url: "/create", 
    templateUrl: "views/create.html", 
    resolve: { 
     templates : function(templateService, $q){ 
      var deferred = $q.defer(); 
      templateService.allMetadata.query({}, function(data){ 
       deferred.resolve(data); 
      }, function(err){ 
      console.log(err); 
      deferred.reject(); 
      }); 
      return deferred.promise; 
     } 
    }, 
    controller: 'createCtrl' 
관련 문제