AngularJS路由导致服务器调用问题

时间:2015-07-25 08:40:59

标签: javascript angularjs angularjs-routing node-webkit

我在nodewebkit应用程序中使用AngularJS 我有三种观点:

  1. Home.html
  2. Conversation.html
  3. Login.html
  4. 登录时,我正在呼叫

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

    调用

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

    在主html中,我正在进行服务器调用(通过socket.io)来获取所有对话。 由于数据量巨大,因此加载它需要一些时间,在这个时间间隔内,即在用户从服务器获得响应之前,如果用户点击Logout,它会将用户带回登录页面。

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

    即。它叫

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

    现在,当用户尝试登录时,服务器会响应拨打电话进行对话,以便用户将他带到/home/conv.html。

    在从服务器向客户端发送数据时,我不想禁用Logout按钮。
    从/ home到/ login的路由有什么办法,我们可以取消所有服务器调用吗?

1 个答案:

答案 0 :(得分: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 ... }
  }
})

当您从home.main移动到另一条路线时,将触发onExit事件。因此,您应该注册以处理声明home.main路由的事件。在这种情况下,您可以取消所有服务器呼叫。当您使用socket.io时,我建议您使用函数socket.removeAllListeners();