我正在尝试在Angular 1.3中进行动态路由。类似于其描述的here和here。这些例子表明这样的事情:
$routeProvider.when('/:group/:pagename', {
controller: 'RouteCtrl',
templateUrl: 'uirouter.html'
})
然后控制器将通过$ routeParams访问组和页面名称。这工作
我正在努力使这个路由更加动态,并且还要动态选择模板和控制器:
$routeProvider.when('/:group/:pagename', {
controller: $routeParams.group + 'Ctrl',
templateUrl: $routeParams.pagename + '.html'
})
当我在when
上放置一个断点时,我可以看到有一个带有$ routeParams作为参数之一的函数的$ get属性。但我无法弄清楚如何检索其价值。
该项目处于初期阶段 - 如果其中任何一个具有此功能,我可以使用ui-router或ng-router。
答案 0 :(得分:2)
对于动态templateUrl部分,您可以尝试:
$routeProvider.when('/:group/:pagename', {
controller: "SomeCtrl",
templateUrl: function(params){return params.pagename + '.html';}
})
不确定控制器是否也可以这样做。
答案 1 :(得分:2)
您可以声明一个返回templateUrl
字符串的函数,而不是直接值,即:
$routeProvider.when('/:group/:pagename', {
controller: $routeParams.group + 'Ctrl',
templateUrl: function (routeParams) {
return routeParams.pagename + '.html';
}
});
我想controller
可能也是如此,但你必须测试一下,因为我从未将它用于控制器。
话虽这么说,如果你在这个地方有如此多的动态逻辑,也许不是将它视为不同的控制器,你可以将这些视图封装为不同的指令和ng-if
某些指令取决于{{1}将在一个包装控制器中设置?