我正在尝试将登录信息引入用户浏览应用程序的方式。
如果用户满足特定要求,我假装将用户重定向到该页面,直到他导航到登录页面之前
防止事件从$ stateChangeStart停止,阻止状态更改,如预期的那样,但是当我运行$
state.go(’into_somewhere’)时,我进入无限循环
我的角度版本是1.3.1,而ui-router是最新的
.factory('RouteHistory', function ($rootScope,$log, $state, Auth, $urlRouter, $timeout) {
// after the user enter a page
var currentState = '';
// when the user is trying to access a page that he has not permissions
// or that requires the user to be logged in
var pendingState = '';
var isMenuTogglerVisible = false;
var skipFromStateVal = true;
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){
event.preventDefault();
if (toState.name == 'login' && fromState.name != 'login'){
$log.log('Ui-router: changing to login');
// $urlRouter.sync();
$state.go('login')
//pendingState = fromState;
//$log.log('Peding state updated to:' + pendingState.name );
//$urlRouter.sync();
}
if (fromState.name == 'login' && Auth.isLoggedIn()) {
$log.log('Ui-router: going from login');
//$state.go(fromState.name);
$timeout(function(){
// $state.go('home', null, {/*reload: true, location: 'replace'*/});
$state.go('browse-machine');
//$urlRouter.sync();
},2000)
}
$log.log({
'toState': toState,
'toParams': toParams,
'fromState': fromState,
'fromParams': fromParams
})
})
return {
};
});
一般来说,我 只在需要时才* 重定向 ($state.go()
) 。在其他情况下,请退出事件监听器: *
if (toState.name === 'login' ){
// doe she/he try to go to login? - let him/her go
return;
}
if(Auth.isLoggedIn()){
// is logged in? - can go anyhwere
return;
}
// else
$state.go('login')
这是简化的逻辑,但表明,仅在需要时才应更改为执行。还有一些其他示例,其中包含更详细的实现方式和功能:
正如评论中所提供的,有一个plunker,我在这里像这样更改
...
// three new lines
if (toState.name === 'specialRoute'){
return;
}
if (fromState.name=='route1'){
event.preventDefault();
$state.go('specialRoute')
}
而且这 不再
循环了。请在这里检查
问题内容: 在AngularJS中,我看到有时使用有时使用。谁能告诉我它们的区别以及何时应使用另一种? 问题答案: 您是指AngularUI路由器吗?如果是这样,则Wiki 指定差异: $ state.go(至[,toParams] [,选项]) 返回表示过渡状态的 Promise 。 过渡到新状态的便捷方法。内部调用,但会自动将选项设置为。这样,您可以轻松地使用绝对路径或相对路径,并仅指定要更新
问题内容: 我试图弄清楚为什么页面在单击时没有导航到其模板。URL更新,并且我没有JS错误。。我相信它 会加载 文件,但随后会无限加载控制器。我在SessionsController的实例化中添加了代码后,发现了这一点。 布局 我的看法 我的JS 在里面,我有个大而光明的人: 问题答案: 我唯一看到的是缺少括号和逗号。您可以尝试以下方法:
问题内容: 我正在为编写处理程序: 没有include方法。我应该做些不同的事情,还是有办法做我想做的事情? 另外,当//一些登录内容包含时,我会遇到无限循环。是什么原因造成的? 这是一个更完整的示例,展示了我们最终要进行的工作: 我不喜欢在中搜索特定状态。感觉很幼稚。我不确定为什么并且不能成为该服务的实例,或者为什么该服务不能在其方法中接受状态配置覆盖。 无限循环是由我们方面的错误引起的。我不喜
我正在尝试重定向仪表板页面上的登录用户。 这是我的代码: 当用户登录时,我的应用程序正在运行一个带有方法的循环。 我已经在StackOverflow上考虑过两个类似的问题,它们是: react超出最大调用堆栈大小 React-router,onEnter导致身份验证无限循环 我两种都试过,但不幸的是,那些例子对我没有帮助。(我也是React的初学者) 请告诉我我的代码有什么问题?
问题内容: 角度ui路由器的示例演示在起始页面具有以下链接: “ ui-router”的完整网址为或 “关于”的完整网址为或 当我使用durandalJS时,存在一个限制,即默认URL只是“ /”,不能有“ / ui-router”。 Angular ui路由器插件有相同的限制吗? 问题答案: 请参阅此处,默认路由有一个“其他”选项。
最终编辑:使用transcluded指令处理plunker。 编辑:我用第一个答案中给出的解决方案做了第一次撞击。它可以工作,但这不是期望的行为,因为模板包含所有的部分内容。 我用我希望达到的目标做了第二次尝试(但显然不起作用)。我认为这主要是因为模板不是分部的父级,但它包含在其中,所以ui路由器不太理解我想要什么。 在此方面的任何帮助都将不胜感激! 我们正在建立一个网站与角材料和UI路由器,我们