如何浏览器页面错误重新加载root页面

使用angularjs的但页面应用时,由于是本地路由在控制页面跳转,但是有的时候我们需要判断用户是否登录来判断用户是否能进入界面。
angularjs是mvc架构所以实现起来很容易也很灵活,我们只MainController里增加一个路由事件侦听并判断,这样就可以避免未登录用户直接输入路由地址来跳转到登录界面地址了
代码中的 $rootScope.user是登录后把用户信息放到了全局rootScope上,方便其他地方使用,$rootScope.defaultPage也是默认主页面,初始化的时候写死到rootScope里的。
12345678$rootScope.$on(&$stateChangeStart&,function(event, toState, toParams, fromState, fromParams){ if(toState.name==&login&)// 如果是进入登录界面则允许 // 如果用户不存在 if(!$rootScope.user || !$rootScope.user.token){
event.preventDefault();// 取消默认跳转行为
$state.go(&login&,{from:fromState.name,w:&notLogin&});//跳转到登录界面 }});
另外还有用户已经登录,但是登录超时了,还有就是增加后台接口的判断来增强安全性。不能完全依靠本地逻辑
我们在model里面增加一个用户拦截器,在rensponseError中判断错误码,抛出事件让Contoller或view来处理1234567891011121314151617181920212223app.factory(&UserInterceptor&, [&$q&,&$rootScope&,function ($q,$rootScope) { return {
request:function(config){
config.headers[&TOKEN&] = $rootScope.user.
responseError: function (response) {
var data = response.
// 判断错误码,如果是未登录
if(data[&errorCode&] == &500999&){
// 清空用户本地token存储的信息,如果
$rootScope.user = {token:&&};
// 全局事件,方便其他view获取该事件,并给以相应的提示或处理
$rootScope.$emit(&userIntercepted&,&notLogin&,response);
// 如果是登录超时
if(data[&errorCode&] == &500998&){
$rootScope.$emit(&userIntercepted&,&sessionOut&,response);
return $q.reject(response);
};}]);
别忘了要注册拦截器到angularjs的config中哦
123app.config(function ($httpProvider) {
$httpProvider.interceptors.push(&UserInterceptor&);});
最后在controller中处理错误事件1234$rootScope.$on(&userIntercepted&,function(errorType){ // 跳转到登录界面,这里我记录了一个from,这样可以在登录后自动跳转到未登录之前的那个界面 $state.go(&login&,{from:$state.current.name,w:errorType});});
最后还可以在loginController中做更多的细节处理
12345// 如果用户已经登录了,则立即跳转到一个默认主页上去,无需再登录if($rootScope.user.token){ $state.go($rootScope.defaultPage); }
另外在登录成功回调后还可以跳转到上一次界面,也就是上面记录的from12var from = $stateParams[&from&];$state.go(from && from != &login& ? from : $rootScope.defaultPage);
此文是本站原创,转载请标注作者和链接出处!
1219241121111在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
我使用$state.go();来切换页面
其中有些页面的数据是动态的,我希望每次进来都重新加载数据。
请问如何每次当切换到这个页面时都重新加载页面(重新执行controller中的方法)?
$state.go('page',null,{
reload:true
这个也并没有效果
app.run(['$rootScope', '$location',
function($rootScope, $location) {
$rootScope.$on('$stateChangeStart', function(evt, next, current) {
alert('route begin change');
我在这里获得了state变化的事件 然而并不知道如何刷新$scope...
我是这样实现的
$scope.$on('$stateChangeSuccess', function(evt, next, current) {
// 数据reload
不知道算不算土办法...
但是这样也出现一个新的问题
$stateChangeSuccess中的方法会触发2遍,这是什么情况呢?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
不需要特别处理啊, 你写在controller中的代码, 每次切换到这个页面中时, 这里面的代码都会自动执行一次的
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。本人手机已经解锁,卡刷root时,supersu卡刷包读卡载入到一半就重启了,怎么刷都是读到一半就重启【荣耀v8吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:42,435贴子:
本人手机已经解锁,卡刷root时,supersu卡刷包读卡载
本人手机已经解锁,卡刷root时,supersu卡刷包读卡载入到一半就重启了,怎么刷都是读到一半就重启,求大神指点
楼主解决了吗一样的问题
刷康大的ROM包吧,卡刷su好像过不去
一样单独root包刷不了,后直接在花粉俱乐部下第三方包刷的
楼主解决了吗
我也是这样的情况
刷5.0专用的super就可以了,亲测https:去掉//pan.baidu.com/s/1tfsMdL_nPkwGoLnpiHEZKQ 密码: tmcu
贴吧热议榜
使用签名档&&
保存至快速回贴拒绝访问 | www.chiphell.com | 百度云加速
请打开cookies.
此网站 (www.chiphell.com) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(43e3a366ecc04382-ua98).
重新安装浏览器,或使用别的浏览器Microsoft - Official Home Page
Microsoft - Official Home Page
可携带的强大功能
随心所欲,百变菁英
独具匠心,彰显自我。
真4K 60帧超高清游戏机。
通过新一代电脑亲身体验 Windows 的非凡魅力。
在全新的团队合作中心中获取共享工作区,以进行团队对话和共享文件/应用。
下载适用于 IT 专业人士的 90 天免费评估版。
预定开发版。改变你的世界。
脱离服务器的束缚 - 无需管理基础结构即可更快地构建应用。
了解更多微软中国市场活动
看资深大咖分享中小企业 IT 管理心得,并演示 O365 管理工作实践
关注 Microsoft

我要回帖

更多关于 页面重新加载 的文章

 

随机推荐