我正在使用ui-router。我知道设置一个动态的templateUrl,但我想管理一个动态控制器。
以下是我正在寻找的内容:
KCachegrind
有可能做那样的事吗?我走错路了吗?
答案 0 :(得分:1)
这就是我要做的事情:
$stateProvider
.state('intermediary-state', {
url: '/',
onEnter: ['$stateParams', '$state',
function ($stateParams, $state) {
if ($stateParams.id === '1') {
$state.go('somewhere');
} else {
$state.go('somewhere-else');
}
}]
})
.state('somewhere', {
url: '/somewhere',
controller: 'SomewhereCtrl'
})
.state('somewhere-else', {
url: '/somewhere-else',
controller: 'SomewhereElseCtrl'
});
这背后的逻辑是我使用的中间状态只能抓取stateParams,进行相应的评估和重定向。
话虽这么说,但我不确定为什么你需要你的控制器基于stateParams动态化。这对我来说似乎也是一种代码味道,更好的选择是依赖于底层服务。
例如,你可能有一个不同的家庭"登录用户与来宾用户的状态/控制器,并且AuthenticationService负责该逻辑。
$stateProvider
.state('intermediary-state', {
url: '/',
onEnter: ['authenticationService', '$state',
function (authenticationService, $state) {
if (authenticationService.isLoggedIn()) {
$state.go('home-user');
} else {
$state.go('home-guest');
}
}]
})
答案 1 :(得分:0)
我不认为对控制器这样做是个好主意。首先,
return "myFirstController";
不起作用,因为在评论中已经注意到了。你需要
$controller("myFirstController");
相反,它用于测试和黑客攻击,而不是用于琐碎的用法。考虑它的外观警告代码味道。
好处是您根本不需要在路由器中定义控制器,您可以使用ng-controller
在模板文件中为视图选择合适的控制器。