【发布时间】:2015-07-08 08:40:06
【问题描述】:
目前我有一个位于 url '/' 的状态 'home'。用户连接后,会加载“客户端”状态,该状态也位于 url '/' 处,并且会话会更新。是否有可能使如果用户重新加载页面,立即加载“客户端”状态而不是“主页”状态?如果它们位于不同的 url,我可以简单地让服务器执行重定向,但我希望它们都位于基本 url '/'。 ui-router 中是否有一些功能可以让我实现这一目标?
这是我的状态:
app.config(function($stateProvider, $urlRouterProvider,$locationProvider) {
$stateProvider
.state('home', {
url: '/',
controller: 'HomePageConroller as homeCtrl',
templateUrl: '/views/partials/home.html',
onEnter: function($http,$state) {
$http.post('/checkconnected')
.success(function(data,status) {
if (data) {$state.go('client');}
});
}
})
.state('client', {
url: '/',
controller: 'ClientController as clientCtrl',
templateUrl: '/views/partials/client.html'
});
如您所见,我目前正在向服务器发布检查以查看客户端是否已连接,然后从 Angular 应用程序中进行重定向,但我对这个解决方案一点也不满意。该帖子需要一些时间,因此主页已完全加载并在显示客户端页面之前被用户看到。
我考虑过的一个解决方案是拥有另一个名为“客户端重定向”的状态,它确实驻留在“/客户端”并具有与“客户端”状态相同的模板,它执行相同的 $state.go on enter 而无需$http.post (因为服务器已经根据更新的会话重定向)。这将消除延迟并且不会闪烁主屏幕,但它看起来并不优雅。
【问题讨论】:
-
看看那个link
-
@StoyanDekov 我相信答案与我在上面的代码中所做的基本相同,除非
authSvc正在做一些我不知道的特殊事情。唯一的区别是在代码解析父状态“home”的模板时显示
标签: angularjs angular-ui-router state