2013-11-25 1 views
1

특정 항목에 대해 AJAX 요청이 반환 될 때까지 컨트롤러 로딩을 지연하려고합니다. 각 컨트롤러에서 내가 좋아하는 경로와 컨트롤러를 정의AngularJS 라우팅 삽입

define(['app'], function(app){ 

    app.config(["$routeProvider", function($routeProvider) { 
     $routeProvider.when('/app-builder/:id', { 
      templateUrl: 'views/app-builder.html', 
      controller: 'AppBuilderCtrl', 
      resolve: { 
       resolvedVal: function($routeParams, AppsModel) { 
        return AppsModel.findOne($routeParams.id); 
       } 
      } 
     }); 
    }]); 

    app.controller('AppBuilderCtrl', [function() { .... }]); 

}); 

문제가 $routeParamsresolvedVal가 호출 재산 id이없는 것입니다. 내가 여기서 무엇을 놓치고 있니? 이것이 올바른 접근 방식이 아니라면 무엇입니까? 당으로

답변

3

documentationresolve의 :.

이 ngRoute $ routeParams는 여전히 이러한 해결 기능 내에서 이전 경로를 참조된다는 점에 유의해야합니다. $ route.current.params를 사용하여 새로운 라우트 매개 변수에 액세스하십시오.

이 작동합니다 :

resolve: { 
     resolvedVal: function($route, AppsModel) { 
      return AppsModel.findOne($route.current.params.id); 
     } 
    } 
+1

무슨에서 컨트롤러로 XHR를 전달하는 최적의 방법이 될 것이다? – amcdnl

+0

@amcdnl 가장 좋은 방법은 AppsModel.findOne이 약속을 반환하는 것입니다. 해결 의존 관계 중 하나가 약속이면 라우터는 컨트롤러가 인스턴스화되기 전에 모두 해결 될 때까지 기다립니다. 약속이 성공적으로 해결되면 해결 된 약속의 가치가 주입됩니다. 나는 항상 약속을 반환하는 restangular를 사용하므로 AppsMopdel.findOne은 Restangular.one ('company', id) .get(); – Beyers

+0

예, 내 것이 약속을 반환합니다. 오 컨트롤러에 주사를 맞았습니까? – amcdnl