2016-04-11 3 views
0

У меня есть угловой webapp, который использует предварительно подготовленную тему/фрейм под названием fuse (http://withinpixels.com/themes/fuse), эта тема уже имеет структуру приложения и код, написанный для создания приложений Полегче.угловой, почему страница перезагружается при изменении состояния приложения

Мы добавили несколько страниц (включая элементы sidemenu), проблема в том, что при нажатии одной из ссылок на боковой панели вся страница, кажется, перезагружена или по крайней мере animate-slide-up воспроизводится 2 раза по главной строке индекса ДИВ, я проследил вниз на одну часть проблемы в модуле конфигурации страницы:

$stateProvider.state('app.pages_dashboard', { 
     url  : '/dashboard', 
     views : { 
      '[email protected]'      : { 
       templateUrl: 'app/core/layouts/vertical-navigation.html', 
       controller : 'MainController as vm' 
      }, 
      '[email protected]_dashboard': { 
       templateUrl: 'app/main/dashboard/dashboard.html', 
       controller : 'DashboardController as vm' 
      }, 
      '[email protected]_dashboard': { 
       templateUrl: 'app/navigation/layouts/vertical-navigation/navigation.html', 
       controller : 'NavigationController as vm' 
      }, 
      '[email protected]_dashboard': { 
       templateUrl: 'app/toolbar/layouts/vertical-navigation/toolbar.html', 
       controller : 'ToolbarController as vm' 
      }, 
     }, 
     bodyClass: 'login', 
     needAuth: true, 
     onStateChangeStart: function(event, state, auth, api) { 
      console.log('onStateChangeStart on DASHBOARD'); 
      api.getUserCard.save({}, {}, function (response){ 
       if (!response.result) { 
        state.go('app.pages_claimcard'); 
       } 
      }); 
     } 
    }); 

и модуль конфигурации приложения

angular 
    .module('fuse') 
    .run(runBlock); 

/** @ngInject */ 
function runBlock($rootScope, $timeout, $state, $auth, api) 
{ 
    console.log('INDEX.RUN loaded'); 
    // Activate loading indicator 
    var stateChangeStartEvent = $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) 
    { 
     // console.log('started change event'); 
     // console.log(toState); 
     // console.log(fromState); 

     // check if authentication needed 
     if (toState.needAuth) { 
      // redirect to login page 
      if (!$auth.isAuthenticated()) { 
       event.preventDefault(); 
       $state.go('app.pages_auth_login'); 
      } 
     } 

     if (toState.onStateChangeStart) { 
      // THIS CAUSES ONE OF THE RELOADS 
      // toState.onStateChangeStart(event, $state, $auth, api); 
     } 

     $rootScope.loadingProgress = true; 
    }); 

    // De-activate loading indicator 
    var stateChangeSuccessEvent = $rootScope.$on('$stateChangeSuccess', function() 
    { 
     $timeout(function() 
     { 
      $rootScope.loadingProgress = false; 
     }); 
    }); 

    // Store state in the root scope for easy access 
    $rootScope.state = $state; 

    // Cleanup 
    $rootScope.$on('$destroy', function() 
    { 
     stateChangeStartEvent(); 
     stateChangeSuccessEvent(); 
    }); 
} 

, как вы можете видеть, что я прокомментировал функцию toState OnStateChangeStart , и это избавило «перезагружает» приложение, поэтому в основном есть 2 вопроса:

  1. Почему функция onStateChangeStart в состоянии toState заставляет перезагружать страницу?
  2. Я понятия не имею, что может вызвать другую перезагрузку страницы, любые идеи?
+0

Вы пытались поставить 'event.preventDefault();' в блоке if, где вы говорите, что функция вызывает перезагрузку? – azium

+0

yes, тогда ссылка боковой панели перестает работать вместе, что имеет смысл ... если функция getUserCard в toState не вызывает изменение состояния, тогда ничего не должно произойти. – ospfranco

ответ

1

Я нашел проблему, мои состояния определялись как:

'app.pages.dashboard' 

однако никогда не была декларация

'app.pages' 

так UI-маршрутизатор пытается делать все возможное, чтобы отсортировать этот беспорядок , в любом случае, всегда помните, чтобы правильно объявлять ваши государства, и все должно быть хорошо.

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