2015-07-25 1 views
2

Я использую AngularJS в приложении nodewebkit.
У меня есть три вида:Маршрутизация AngularJS, вызывающая проблемы с вызовами сервера

  1. home.html
  2. Conversation.html
  3. login.html

При входе в систему, я звоню

$state.go('home.main');  

который называет

$stateProvider.state('home.main', { 
      url: '/home', 
      views: { 
       "mainContent": { 
        templateUrl: 'views/home.html', 
        controller: 'loginController' 
       } 
      } 
} 

В основном html, я делаю серверный вызов (через socket.io), чтобы получить все разговоры. Поскольку данные огромны, требуется некоторое время, чтобы загрузить их и в этот промежуток времени, то есть до того, как пользователь получит ответ от сервера. Если пользователь нажмет на «Выход», он вернет пользователя на страницу входа.

$scope.logout = function(){ 
    //Logout Logic 
     $state.go('login'); 
} 

т.е. он вызывает

$stateProvider.state('login', { 
      url: '/login', 
      templateUrl: 'views/login.html', 
      controller: "loginController" 
     }); 

Теперь, когда пользователь пытается войти в систему, сервер отвечает на вызов, сделанный для получения разговоров, позволяя пользователю принять его /home/conv.html.

Я не хочу отключать кнопку Logout, пока данные отправляются с сервера на клиент.
Есть ли способ маршрутизации из/home to/login, мы можем отменить все вызовы сервера?

+1

Вы можете отключить сокет, используя 'socket.disconnect()' см., Если это поможет –

ответ

0

Я скопировал код из https://github.com/angular-ui/ui-router/wiki:

$stateProvider.state("contacts", { 
    template: '<h1>{{title}}</h1>', 
    resolve: { title: 'My Contacts' }, 
    controller: function($scope, title){ 
    $scope.title = 'My Contacts'; 
    }, 
    onEnter: function(title){ 
    if(title){ ... do something ... } 
    }, 
    onExit: function(title){ 
    if(title){ ... do something ... } 
    } 
}) 

События OnExit будет срабатывать при переходе от home.main другого маршрута. Поэтому вы должны зарегистрироваться для обработки события, когда вы объявляете маршрут home.main. В этом случае вы можете отменить все вызовы сервера. Поскольку вы используете socket.io, я предлагаю вам использовать функцию socket.removeAllListeners();

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