我编写角度控制器的风格是这样的(使用控制器名称而不是函数)
angular.module('mymodule', [ ]) .controller('myController', [ '$scope', function($scope) { // Some code here } ]);
我现在需要的是提供我要定义解析部分的路线时:
$routeProvider.when('/someroute', { templateUrl: 'partials/someroute.html', resolve: myController.resolve}) // THIS IS THE CRITICAL LINE
由于控制器定义为名称,如何解决以下问题?
为了更详细地阐明,我想在解析路由之前从服务器加载一些数据,然后在控制器中使用这些数据。
更新: 更准确地说,我希望每个模块都有其“解析”功能,该功能将在执行具有该控制器的root用户之前被调用。这篇文章中的解决方案(由MiskoHevery回答)完全符合我的要求,但是我没有控制器作为函数而是作为名称。
控制器定义和分解部分应在路径定义中分别指定。
如果您在模块级别定义控制器,则需要以字符串形式引用它们,因此:
$routeProvider.when('/someroute', { templateUrl: 'partials/someroute.html', controller: 'myController', resolve: { myVar: function(){ //code to be executed before route change goes here }; });
上面的代码还显示了如何定义一组在更改路线之前将要解决的变量。解决后,可以将这些变量注入到控制器中,因此以上面的代码片段为例,您将像这样编写控制器:
.controller('myController', ['$scope', 'myVar', function($scope, myVar) { // myVar is already resolved and injected here } ]);
该视频也可能会有所帮助:http : //www.youtube.com/watch?v=P6KITGRQujQ