使用微调器

时间:2016-09-22 13:19:28

标签: angularjs

我有一个SocketService(使用socket.io),我就这样调用我的后端服务器:

SocketService.on("get user data", (response) => {
    DataService.data = response;
});

我有一个像这样的控制器:

...
.controller("UserController", ($scope, DataService) => {
    SocketService.emit("get user data");
    $scope.users = DataService.data;
});

现在,这是流程:

  1. 控制器加载,使用SocketService向我们的后端发出请求。
  2. $ scope.users等于空数组,因为我们还没有得到响应。
  3. SocketService侦听响应,更新DataService。
  4. 问题是,除非我再次点击按钮再加载UserController,否则我会看到一个空数组。所以,首先点击,我看到一个空数组。 1秒后再次点击,我看到用户数组。

    有没有办法在Angular上做这样的事情?

    // pseudo code
    SocketService.emit("get user data");
    Spinner.show();
    
    SocketService.on("get user data", (response) => {
        angular.controllers.resolve("UserController", ($scope) => {
            $scope.users = response;
        });
        Spinner.hide();
    });
    

1 个答案:

答案 0 :(得分:0)

我不知道你的socket.io的SocketService,但是如果它是一个普通的角度服务并通过$ http调用后端我会做以下事情:

SocketService(注入$ http):

function get(url, config) {
  return $http.get(url, config);
};

UserController(注入你的SocketService):

function getUserData() {
  SocketService.get('myUrl', {})
    .then(function(response) {
       $scope.users = response.data;
    });
}

我希望这会给你一个解决问题的冲动。