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