取消路线并重定向到其他路线,而不显示AngularJS中的原始内容
发布时间:2020-12-17 07:38:22 所属栏目:安全 来源:网络整理
导读:我想检查一个http服务,看看用户是否经过身份验证,并且有权限在AngularJS 1.2.0rc1中查看某个页面(控制器). 我有这种情况: 用户A想访问http://www.example.com/content.现在,当内容不通过身份验证时,该内容不可访问.如果用户未通过身份验证,则应将其重定向到
我想检查一个http服务,看看用户是否经过身份验证,并且有权限在AngularJS 1.2.0rc1中查看某个页面(控制器).
我有这种情况: 现在我设法做到这一点,但是我简要地看到内容页面的渲染的html.我不想要这个如何重定向到登录页面,而不呈现内容页面? 我注册我的路线是这样的: $routeProvider.when('/login',route.resolve('Login',false)) $routeProvider.when('/content',route.resolve('Content',true)) 现在我试过这个: $rootScope.$on('$routeChangeStart',function (event,route) { if (route.requiresLogin) { $http.get('/api/user/loggedin/').then(function (response) { if (response !== 'true') { $location.path('/login'); } }); } }); 哪个工作,但我仍然看到其他页面(内容)的html的内容闪烁. 我已经阅读了here,您也可以尝试在路由解析时更改解析功能: var resolve = function (baseName,requiresLogin) { var routeDef = {}; var dependencies = [routeConfig.getControllersDirectory() + baseName + 'Controller.js']; routeDef.templateUrl = routeConfig.getViewsDirectory() + baseName.toLowerCase() + '.html'; routeDef.controller = baseName + 'Controller'; routeDef.requiresLogin = requiresLogin; routeDef.resolve = { load: ['$q','$rootScope','$http','$location',function ($q,$rootScope,$http,$location) { console.log(requiresLogin); if (requiresLogin) { return checkLoggedIn($q,$location); } else { return resolveDependencies($q,dependencies); } }] }; return routeDef; } 但是这里的页面也会简要显示. 希望你能帮助我.
第一个答案应该有效,但是要使用
$q,我会使用defer.resolve()或defer.reject(“reject_reason”),然后我将在绑定到一个元素的顶层控制器中收听$routeChangeError在routeProvider管理的ng视图之外.
所以在你的HTML中,像: <body ng-app="app" ng-controller="DocumentCtrl"> <div ng-view> </div> </body> 那么你的路线将被定义如下: when('/home',{ templateUrl: templateUrl blah,controller: baseName + 'Controller',resolve: { load: function($q,MY_USER_SERVICE){ var defer = $q.defer(); if(~MY USER LOGGED_IN LOGIC RETURNS TRUE~){ defer.resolve(); } else { defer.reject("not_logged_in"); } return defer.promise; } } }). 然后我的DocumentCtrl控制器将包含: $scope.$on("$routeChangeError",function(evt,current,previous,rejection){ if(rejection == "not_logged_in"){ //DO SOMETHING } else { //OR DO SOMETHING ELSE } }); 我正在运行上面,没有任何不应该加载的视图的闪光. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- angularjs – ng-change,ng-click不适用于自v1.3.0以来的da
- 你喜欢SOAP吗?反正我不喜欢!
- angular – 相同NgRx功能模块的独立实例
- 4.7、Bootstrap V4自学之路------组件---广告屏
- angularjs – Angular Stripe – 将条带支付表格转换为条纹
- AngularJS:何时使用transclude’true’和transclude’elem
- 基于ngMockE2E实现后台数据模拟
- 如何使用SOCK_DGRAM制作双向unix域套接字?
- 使用J2SE开发一个测试Xfire的webservice的简单程序
- 《数据结构》实验二: 线性表实验