gpt4 book ai didi

angularjs - Angular UI-Router 重定向登录用户远离登录路由

转载 作者:行者123 更新时间:2023-12-01 11:30:47 26 4
gpt4 key购买 nike

我正在使用 ui-router 开发 Angular + Meteor 项目。我的问题是,当人们登录并手动转到 /login 路由时,我想将他们直接重定向到主页。

我不想在 Controller 中执行此操作,而是直接在路由中执行此操作。我尝试了 onEnter 函数,但是手头没有 $meteor 依赖项来查看用户是否已登录。然后我开始解决 ( https://github.com/angular-ui/ui-router/wiki#resolve )。

有了这个,我创建了一个可行的解决方案,但它感觉部分像 hack,我希望得到一些关于如何删除 hacky 部分的反馈或建议。

路由代码(在coffeescript中):

.state( 'public.login',
url: '/login'
views:
"container@public":
templateUrl: 'client/views/session/login.html'
controller: 'SessionCtrl'
resolve:
'currentUser': [ '$meteor', '$state', ( $meteor, $state )->
$meteor.waitForUser().then( ( user )->
if user
$state.go( 'private.home' )
, ( error ) ->
console.log("error", error)
)
return
]
)

如您所见,我没有将 promise 作为 resolve 函数的返回值传递,而是自己检查 promise ,如果用户已登录,我会将状态更改回主页。

这行得通,但感觉就像我在破解 resolve 函数。

我不想为示例 8.5 @ http://angular-meteor.com/tutorials/angular1/user-accounts-authentication-and-permissions 中的“stateChangeError”添加一个监听器.如果 resolve promise 为假,他们会在那里捕获错误,在我的情况下,我做相反的事情,只想在 promise 为真时重新定位。

有什么建议吗?

***更新****根据 Nikhil 的建议添加了此解决方案。谢谢!

angular.module( 'myApp' ).run(
( $rootScope, $location, $state ) ->
$rootScope.$on( '$stateChangeStart', ( event, toState, toParams, fromState, fromParams ) ->

if toState.name is 'public.login'
if event and event.targetScope and event.targetScope.currentUser
#to prevent login view to be displayed, I prevent default
event.preventDefault();
$state.go( 'private.home' )
)
)

最佳答案

你可以在下面的 block 中移动你的逻辑

$rootScope.$on( "$stateChangeStart", function(event, toState, toParams, fromState, fromParams) {
// logic

});

关于angularjs - Angular UI-Router 重定向登录用户远离登录路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32230102/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com