AngularJS路由注入

AngularJS路由注入,angularjs,angular-routing,Angularjs,Angular Routing,我试图延迟控制器的加载,直到针对特定项目返回AJAX请求。在每个控制器中,我定义路由和控制器,如下所示: define(['app'], function(app){ app.config(["$routeProvider", function($routeProvider) { $routeProvider.when('/app-builder/:id', { templateUrl: 'views/app-builder.html',

我试图延迟控制器的加载,直到针对特定项目返回AJAX请求。在每个控制器中,我定义路由和控制器,如下所示:

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() { .... }]);

});
问题是调用
resolvedVal
时,
$routeParams
没有属性
id
。我错过了什么?如果这不是正确的方法,什么是?

根据解决方法:

请注意,ngRoute.$routeParams仍将引用这些解析功能中的上一条路由。改为使用$route.current.params访问新的路由参数

这应该起作用:

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

将XHR传递给控制器的最佳方式是什么?@amcdnl最好的方式是让AppsModel.findOne返回一个承诺。如果任何解析依赖项都是承诺,路由器将在实例化控制器之前等待它们全部解析。如果成功解决承诺,则注入已解决承诺的值。我使用restangular,它总是返回一个承诺,因此AppsMopdel.findOne可以像restangular.one('company',id).get()一样实现;是的,我的承诺会回来的。哦,它们被注入控制器你是说?那很漂亮。。。明白了!再次感谢@amcdnl Yes,因此控制器定义将有一个'resolvedVal',例如app.controller('AppBuilderCtrl',['$scope','resolvedVal',function($scope,resolvedVal){});