我的路线配置如下:
$routeProvider.when('/', {
controller: 'homeController',
templateUrl: 'app/views/main/home.html'
})
.when('/:section/:tree', {
templateUrl: function($routeParams) { return 'App/Views/'+$routeParams.section+'/'+$routeParams.tree+'.html'; },
controller: function ($routeParams) { return $routeParams.tree + 'Controller'; }
})
.otherwise({
redirectTo: '/'
});
}
视图加载正确,但没有控制器,甚至没有调用控制器功能。 有没有办法解决这个问题或根据路线参数确定控制器。
答案 0 :(得分:2)
控制器功能不是返回控制器名称的功能。它应该是控制器本身。
假设tree
路线参数可以是Foo
或Bar
,您只需要
.when('/:section/Foo', {
templateUrl: function($routeParams) { return 'App/Views/'+$routeParams.section+'/Foo.html'; },
controller: 'FooController'
})
.when('/:section/Bar', {
templateUrl: function($routeParams) { return 'App/Views/'+$routeParams.section+'/Bar.html'; },
controller: 'BarController'
})
BTW,这将避免您的应用程序导致异常,即用户在URL中输入Foo或Bar以外的内容。
如果您有许多类似的路线,只需使用循环来定义它们:
['Foo', 'Bar', 'Baz', 'Brr', ...].forEach(function(tree) {
$routeProvider.when('/:section/' + tree, {
templateUrl: function($routeParams) { return 'App/Views/' + $routeParams.section+'/' + tree + '.html'; },
controller: tree + 'Controller'
});
});