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個問題:
- 爲什麼onState狀態onStateChangeStart函數導致頁面重新加載?
- 我不知道什麼可能導致其他的頁面重載,任何想法?
'app.pages.dashboard'
但是從來就沒有對
'app.pages'
所以UI路由器試圖盡力解決這混亂的聲明:
你有沒有試圖把'event.preventDefault();'在if塊,你說的功能導致重裝? – azium
肯定的,那麼邊欄鏈接停止工作都在一起,這是有道理的......如果在使用toState的getUserCard功能不會觸發狀態改變,那麼沒有什麼應該發生。 – ospfranco