AngularJS路由注入
我试图延迟控制器的加载,直到针对特定项目返回AJAX请求。在每个控制器中,我定义路由和控制器,如下所示: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',
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){});