2016-04-11 16 views
0

時,我有一個使用一個預先製作的主題/框架調用保險絲(http://withinpixels.com/themes/fuse)一個角度web應用程序,這個主題已經有一個應用程序的結構和編寫的代碼,使應用程序的創建更輕鬆。角,爲什麼頁面重新加載改變狀態的應用

我們添加了一些頁面(其中包括sidemenu項目),問題是,當您點擊側邊欄中的某個鏈接時,整個頁面似乎被重新加載或者至少一個animate-slide-up在index main上播放了2次DIV,我的問題的一部分追蹤到該頁面的配置模塊:

$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. 爲什麼onState狀態onStateChangeStart函數導致頁面重新加載?
  2. 我不知道什麼可能導致其他的頁面重載,任何想法?

    'app.pages.dashboard' 
    

    但是從來就沒有對

    'app.pages' 
    

    所以UI路由器試圖盡力解決這混亂的聲明:

+0

你有沒有試圖把'event.preventDefault();'在if塊,你說的功能導致重裝? – azium

+0

肯定的,那麼邊欄鏈接停止工作都在一起,這是有道理的......如果在使用toState的getUserCard功能不會觸發狀態改變,那麼沒有什麼應該發生。 – ospfranco

回答

1

我發現這個問題,因爲我的狀態被定義無論如何,永遠記得正確地宣佈你的狀態,一切都應該沒問題。

相關問題