一尘不染

AngularJS使用控制器作为字符串解析

angularjs

我编写角度控制器的风格是这样的(使用控制器名称而不是函数)

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回答)完全符合我的要求,但是我没有控制器作为函数而是作为名称。


阅读 191

收藏
2020-07-04

共1个答案

一尘不染

控制器定义和分解部分应在路径定义中分别指定。

如果您在模块级别定义控制器,则需要以字符串形式引用它们,因此:

 $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

2020-07-04