У меня есть угловой 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 вопроса:
- Почему функция onStateChangeStart в состоянии toState заставляет перезагружать страницу?
- Я понятия не имею, что может вызвать другую перезагрузку страницы, любые идеи?
Вы пытались поставить 'event.preventDefault();' в блоке if, где вы говорите, что функция вызывает перезагрузку? – azium
yes, тогда ссылка боковой панели перестает работать вместе, что имеет смысл ... если функция getUserCard в toState не вызывает изменение состояния, тогда ничего не должно произойти. – ospfranco