AngularJs身份验证如何避免闪烁

AngularJs身份验证如何避免闪烁,angularjs,authentication,Angularjs,Authentication,我正在用AngularJs构建一个应用程序,我想阻止用户在未登录时访问应用程序的内部页面 我有一个单独的应用程序用于登录loginApp和主应用程序mainApp。到目前为止,我在mainApp中为支持身份验证所做的工作如下: mainApp.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/apage', { templateUrl: ..., cont

我正在用AngularJs构建一个应用程序,我想阻止用户在未登录时访问应用程序的内部页面

我有一个单独的应用程序用于登录loginApp和主应用程序mainApp。到目前为止,我在mainApp中为支持身份验证所做的工作如下:

mainApp.config(['$routeProvider', function($routeProvider) {
    $routeProvider. when('/apage', {
        templateUrl: ...,
        controller: ....,
        resolve: {
            load: function($q, AuthService){
                var defer = $q.defer();
                if(AuthService.notLoggedIn) {
                   defer.reject('user_not_logged_in');
                } else {
                   defer.resolve();
                }
                return defer.promise;
            }
        }
    }).run(function($rootScope, $window) {
        $rootScope.$on('$routeChangeError', function(event, next, current, rejection) {
            if (rejection === 'user_not_logged_in') {
                $window.location = '/html/pages/login.html';
            }
        });
    });
}])
我的mainApp的html页面由一个navbar组成,它由NavBarController模块中定义的控制器控制,还有一个包含视图指令的div部分页面


我的问题是,上面的代码对于部分页面很好,但对于导航栏却不行。Navbar正常加载,其控制器尝试调用后端,但由于用户未经身份验证,所以会弹出警报,然后重定向到登录页面,因此失败。为什么会这样?如何防止navbar控制器模块加载和显示?

您可以使用类似的方法

@if (Request.IsAuthenticated) {
  // code for your navbar which required user authentication
}
else {
  // navbar for logged out user.
}

基于你的想法,我在导航栏上使用angular的ng if指令解决了我的问题。如果用户未通过身份验证,则会隐藏该用户。非常感谢。