AngularJS - 在控制器名称中使用 NgRoute 的参数

AngularJS - Using NgRoute's params in a controller name

我在 AngularJS 中设置了一个带有可变参数的路由。

这是this question的扩展;我可以像这样在变量 templateUrl 中使用 params

.when('/course/:lesson', {
    templateUrl: function(params){
         return '/partials/course/' + params.lesson;
    }
    //...
})

但是,如果我尝试为变量控制器名称做一些事情,我会收到 unknown provider 错误

.when('/course/:lesson', {
    templateUrl: function(params){
         return '/partials/course/' + params.lesson;
    },
    controller: function(params){
         return params.lesson + 'Ctrl';
    }
})

基本上,我不想编写 100 个都遵循完全相同结构的不同路由,而是想获取任何 lesson 变量并将其映射到 /partials/course/{{lesson}} 路由以及 {{lesson}}Ctrl控制器。

这可能吗?

否 - 控制器名称是静态的 - 它们是函数,在我们启动我们的应用程序之前编译。更多信息 here.

但是,可以根据 ngController 将控制器动态添加到视图。更多信息 here

您可以执行如下操作,而不是更清洁的操作。但它会起作用

controller: function($scope, $controller, $routeParams){
     $controller($routeParams.lesson + 'Ctrl', {$scope: $scope});
}

处理这种情况会更容易,如果您查看 ui.router,其中 controllerProvider 会像您尝试的那样工作。