Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了取消路线并重定向到其他路线,而不显示AngularJS中的原始内容大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想检查一个http服务,看看用户是否经过身份验证,并且有权限在AngularJS 1.2.0rc1中查看某个页面(控制器).

我有这种情况:
用户A想访问http://www.example.com/content.现在,当内容不通过身份验证时,该内容不可访问.如果用户未通过身份验证,则应将其重定向http://www.example.com/login.

现在我设法做到这一点,但是我简要地看到内容页面的渲染的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中的原始内容全部内容,希望文章能够帮你解决取消路线并重定向到其他路线,而不显示AngularJS中的原始内容所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。