【发布时间】:2014-04-28 14:41:16
【问题描述】:
我的应用程序的着陆页有两种状态:home-public、home-logged-in。现在我想在同一个 URL 上显示两种状态,但让控制器和模板依赖于用户会话(用户是否登录?)。
有没有办法做到这一点?
【问题讨论】:
标签: javascript angularjs angular-ui-router
我的应用程序的着陆页有两种状态:home-public、home-logged-in。现在我想在同一个 URL 上显示两种状态,但让控制器和模板依赖于用户会话(用户是否登录?)。
有没有办法做到这一点?
【问题讨论】:
标签: javascript angularjs angular-ui-router
您可以有一个控制要加载哪个状态的基本状态,并且您可以简单地让声明该基本状态的子状态没有 url:
.state('home', {
url: "/home",
templateUrl: "....",
controller: function($scope,$state,authSvc) {
if(authSvc.userIsLoggedIn()){
$state.go('home.loggedin')
}else{
$state.go('home.public')
}
}
})
.state('home.public', {
url: "",
templateUrl: "....",
controller: function($scope) {
...........
}
})
.state('home.loggedin', {
url: "",
templateUrl: "....",
controller: function($scope) {
...........
}
})
现在在您的基本状态 (home) 的控制器中,您可以检查用户是否已登录,并使用 $state.go() 加载适当的状态。
编辑
正如承诺的那样,a working plunk。
【讨论】:
我不确定两个州是否可以拥有相同的url。我认为可行的选择是定义单个状态
$stateProvider.state('home', {
templateUrl: function (stateParams){
// Implement a logic that select what view from the server should be returned for logged in user and otherwise
//return 'templateurl';
}
})
我没试过,但应该可以。
【讨论】:
myApp.Config,所以我无法建立正确的逻辑。
<div ng-include='templateurl'></div 作为返回值。请参阅文档中的示例。