2016-03-12 4 views
1

Мне нужна помощь, устраняющая мерцание с Угловым. Я получаю мерцание каждый раз, когда проходит новый маршрут. У меня есть кнопка входа и выхода вне ng-view, которая использует ng-if = "authenticated". Проблема заключается в том, что каждый раз, когда нажимается элемент меню и отображается новое представление, мерцает кнопка выхода из системы или входа в систему. Есть ли способ устранить это? Ниже приведена функция модуля, конфигурации и запуска.Угловые мерцания при аутентификации пользователя

PS. Я очень новичок в Angular. Это был скрипт из учебника по использованию 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"); 
       } 
      } 
     }); 
    }); 
}); 
+0

@bata ответила на мои вопросы, однако у меня сейчас новый вопрос. Если пользователь вошел в систему, а затем вышел из системы, кнопка входа в систему не будет изменена на кнопку выхода из системы, если я не перезагружу страницу – Jason

ответ

2

Вы устанавливаете аутентифицированное значение в 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) { 
    ........... 
+0

Awesome :) Большое вам спасибо. Я знал, что это должно быть что-то простое. Еще один вопрос. Если пользователь вышел из системы и они находятся на странице входа в систему, и они нажимают на любой из пунктов меню, он очень быстро начинает загружать представление, но затем аутентификация начинается с – Jason

+0

. Ну, вам также нужно обработать его при выходе из системы. Таким образом, при выходе из системы (в вашем методе выхода) установите значение $ rootScope.authenticated равным false. Я на самом деле просто догадываюсь, потому что я не вижу этот код. – Bata

+0

Это сработало! Еще раз спасибо. что вкратце пытается загрузить представления, когда аутентификация ложна – Jason

Смежные вопросы