javascript - 在 Angular 应用程序中监听 socket.io

标签 javascript angularjs socket.io

我希望将 socket.io 与我的 Angular 应用集成。我已经看到了一些如何创建服务的示例,这使得它可以在 Controller 上访问。我明白了。但我正在寻找一种所有 Controller 都可以对来自 socket.io 的事件调用使用react的方法。

所以:

socket.on('user joined', function (data) {});

我可以在一个 Controller 中做到这一点,但我该如何为所有 Controller 做到这一点?

最佳答案

你会想 encapsulate your socket in a service and inject it into Angular controllers as needed .

让我们做一个套接字服务:

app.factory('socket', function ($rootScope) {
  var socket = io.connect();
  return {
    on: function (eventName, callback) {
      socket.on(eventName, function () {  
        var args = arguments;
        $rootScope.$apply(function () {
          callback.apply(socket, args);
        });
      });
    },
    emit: function (eventName, data, callback) {
      socket.emit(eventName, data, function () {
        var args = arguments;
        $rootScope.$apply(function () {
          if (callback) {
            callback.apply(socket, args);
          }
        });
      })
    }
  };
});

然后我们将注入(inject)一个 Controller 并与之交互(通过 socket.io API):

function AppCtrl($scope, socket) {
  socket.on('init', function (data) {
    $scope.name = data.name;
    $scope.users = data.users;
  });
}

很明显,您可以自定义 Controller 来使用套接字服务执行您需要的操作。

关于javascript - 在 Angular 应用程序中监听 socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32867396/

相关文章:

javascript - 访问控制允许来源无法正常工作

Javascript 数组按多条件排序

c# - C# 控制台应用程序和浏览器之间的 Web Socket

Javascript 关闭问题

javascript - 如何从 json 文件创建菜单

javascript - 无法将引导模式窗口作为路线打开

javascript - 手机间隙 : Angular Controller does not work in new window

angularjs - 如何使用 java-selenium webdriver 访问 angularjs 表单元素?

node.js - Heroku Node.js 应用程序上的 Socket.io 和多​​个 Dyno。 WebSocket 在连接建立之前关闭

javascript - Socket.io 使用 mongoDB 文档发出 [object Object]