2013-11-25 60 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() { .... }]); 

}); 

問題是$routeParams沒有財產idresolvedVal被調用。我在這裏錯過了什麼?如果這不是正確的方法,那是什麼?

回答

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返回一個承諾。如果任何解析依賴關係都是承諾,那麼在控制器實例化之前,路由器將等待它們全部解析。如果承諾解決成功,解決的承諾的值被注入。我使用總是返回promise的restangular,所以AppsMopdel.findOne可以像Restangular.one('company',id).get(); – Beyers

+0

雅,我正在回覆一個承諾。哦,他們被注入到控制器中了嗎? – amcdnl