Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 验证用户身份时角度闪烁_Javascript_Angularjs - Fatal编程技术网

Javascript 验证用户身份时角度闪烁

Javascript 验证用户身份时角度闪烁,javascript,angularjs,Javascript,Angularjs,我需要帮助消除角闪烁。每当一条新的路线经过时,我都会感到一种闪烁。我在ng视图外有一个登录和注销按钮,它使用ng if=“authenticated”。问题是,每当单击菜单项并显示新视图时,注销或登录按钮就会闪烁。有没有办法消除这种情况?下面是模块、配置和运行函数 另外,我是个新手。这是一个使用Angular、php和mysql作为登录系统的教程中的脚本 var app = angular.module('myApp', ['ngRoute', 'ngAnimate', 'ui.bootstra

我需要帮助消除角闪烁。每当一条新的路线经过时,我都会感到一种闪烁。我在ng视图外有一个登录和注销按钮,它使用ng if=“authenticated”。问题是,每当单击菜单项并显示新视图时,注销或登录按钮就会闪烁。有没有办法消除这种情况?下面是模块、配置和运行函数

另外,我是个新手。这是一个使用Angular、php和mysql作为登录系统的教程中的脚本

var app = angular.module('myApp', ['ngRoute', 'ngAnimate', 'ui.bootstrap', 'toaster']);

app.config(['$routeProvider', function ($routeProvider) {
    $routeProvider
        .when('/login', {
            title: 'Login',
            templateUrl: 'views/login.html',
            controller: 'authCtrl'
        })
        .when('/logout', {
            title: 'Logout',
            templateUrl: 'views/login.html',
            controller: 'logoutCtrl'
        })
        .when('/signup', {
            title: 'Signup',
            templateUrl: 'views/signup.html',
            controller: 'authCtrl'
        })
        .when('/dashboard', {
            title: 'Dashboard',
            templateUrl: 'views/dashboard.html',
            controller: 'authCtrl'
        })
        .when('/posts', {
            title: 'Posts',
            templateUrl: 'views/posts.html',
            controller: 'authCtrl'
        })
        .when('/stats', {
            title: 'Stats',
            templateUrl: 'views/stats.html',
            controller: 'authCtrl'
        })
        .when('/ambas', {
            title: 'Ambassadors',
            templateUrl: 'views/ambassadors.html',
            controller: 'authCtrl'
        })
        .when('/images', {
            title: 'Images',
            templateUrl: 'views/images.html',
            controller: 'authCtrl'
        })
        .when('/', {
            title: 'Login',
            templateUrl: 'views/login.html',
            controller: 'authCtrl'
        })
        .otherwise({
            redirectTo: '/posts'
        });
}])
.run(function ($rootScope, $location, Data) {
    $rootScope.$on("$routeChangeStart", function (event, next, current) {
        $rootScope.authenticated = false;
        Data.get('session').then(function (results) {
            if (results.uid) {
                $rootScope.authenticated = true;
                $rootScope.uid = results.uid;
                $rootScope.name = results.name;
                $rootScope.email = results.email;
            } else {
                var nextUrl = next.$$route.originalPath;
                if (nextUrl == '/signup' || nextUrl == '/login') {

                } else {
                    $location.path("/login");
                }
            }
        });
    });
});

在每次路由更改开始时,您都将authenticated值设置为false。因此,每当用户单击以更改路由时,您都会将其设置为false,然后在几分钟后,如果身份验证正常,您会将其设置为true。那会引起闪烁

因此,删除
$rootScope.authenticated=false
$routeChangeStart
回调

$rootScope.$on("$routeChangeStart", function (event, next, current) {
    //$rootScope.authenticated = false; <--- *remove this*
    Data.get('session').then(function (results) {
    ...........
$rootScope.$on(“$routeChangeStart”,函数(事件、下一个、当前){

//$rootScope.authenticated=false;Awesome:)非常感谢。我知道这必须很简单。还有一个问题。如果用户已注销,并且他们在登录页面上,并且他们单击任何菜单项,它会非常短暂地开始加载视图,但随后身份验证开始生效。您也需要在注销时处理它。因此,在注销时(在您的注销方法中)将$rootScope.authenticated设置为false。我现在只是猜测,因为我看不到该代码。这很有效!再次感谢您。如果$routeChangeStart上的身份验证为false,我会尝试在begging上使用event.preventDefault(),然后在出现错误时重定向到login(您已经这样做了)如果成功,则重定向到用户单击的位置;刚好在//$rootScope.authenticated=false之后;但我仍然得到相同的结果resutls@bata回答了我的问题但是,我现在有一个新问题。如果用户登录然后注销,除非我重新加载页面,否则登录按钮不会更改为注销按钮