如何通过函数的返回值将AngularJS控制器与路由相关联?

时间:2016-04-08 14:59:18

标签: angularjs

我正在尝试创建一个AngularJS幻灯片应用,用户可以在projects/目录中添加内容。

路由器已经使用了可变路由。

.when('/:project', {
    templateUrl: function(params) {
        return 'projects/' + params.project + '/project.html';
    }
})

但是,我无法弄清楚如何使用变量控制器名称。例如,以下内容不起作用:

.when('/:project', {
    templateUrl: function(params) {
        return 'projects/' + params.project + '/project.html';
    },
    controller: function() { return 'SomeController'; }
})

但这样做:

.when('/:project', {
    templateUrl: function(params) {
        return 'projects/' + params.project + '/project.html';
    },
    controller: 'SomeController'
})

是否可以使用函数将控制器与路径相关联?

如果这听起来像一个愚蠢的想法,让我解释一下我想做什么。我没有让用户编辑MainController,而是希望能够编写特定于项目的JavaScript。如果项目被删除,该项目的特定JavaScript也将被删除。如果添加了需要自定义JavaScript的新项目,则用户可以使用API​​(AngularJS Events)与UI进行交互。

做这样的事情的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

UI路由器有controllerProvider feature。 ngRoute没有它。

路由controller中指定的函数是实际的控制器构造函数,它不能只返回控制器名称。 ngView directive定义了路由控制器的实例化方式。如果不修补指令,可以使用以下方法模拟行为:

controller: function ($scope, $controller) {
  return $controller('SomeController', { $scope: $scope });
}