AngularJs和套接字服务器

时间:2015-05-07 12:35:11

标签: javascript angularjs node.js sockets

我即将设置我的node.js / socket.io服务器,但由于这是我第一次使用angular,我有几个问题。

问:是否有任何带角度的模块可以使插座连接/通信更容易,或者我是否需要构建自己的模块?

问:由于角度为two way databinding而在制作套接字服务器时是否应该注意一些事项?

我一直在阅读使用Angular和Node构建简单聊天应用程序的博客,但我正在寻找更全面的套接字使用,因为它将在我的应用程序的每个页面上使用。

2 个答案:

答案 0 :(得分:3)

不确定

@btford有一个众所周知且受欢迎的library。您只需要将库包含到项目中,并创建一个工厂,为您的项目返回addListenerremoveListenerremoveAllListenersemit等帮助程序。

angular.module('myApp', [
  'btford.socket-io',
  'myApp.MyCtrl'
]).
factory('mySocket', function (socketFactory) {
  return socketFactory();
});


样品

HTML5 Rocks上还有一个很好的网络教程,其中构建了一个带有Node.js(Express)和Angular.js的简单应用程序,它们通过Socket.io在两个方向上相互通信。来源可在Github上找到。


基础知识(来自tutsplus的样本)

基本上,只需使用回调创建一个简单的Node.js侦听器:

var io = require('socket.io')(8080);

io.sockets.on('connection', function (socket) {
    socket.on('echo', function (data) {
        socket.emit('echo', data);
    });

    socket.on('echo-ack', function (data, callback) {
        callback(data);
    });
});

..将脚本包含在您的前端应用程序中..

<script src="'angular.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script src="angular-socket.js"></script>
<div ng-controller="Ctrl">
    <input ng-model="dataToSend">
    <button ng-click="emitBasic()">Send</button>
    <button ng-click="emitACK()">Send (ACK)</button>
    <div>Server Response: {{ serverResponse }}</div>
    <div>Server Response (ACK): {{ serverResponseACK }}</div>
</div>

..包括模块..

var module = angular.module('socket.io', []);



app.controller('Ctrl', function Ctrl($scope, $socket) {
   $socket.on('echo', function (data) {
      $scope.serverResponse = data;
   });
   // ………
});

答案 1 :(得分:1)

  

是否有任何带角度的模块可以使插座连接/通信更容易,或者我是否需要构建自己的模块?

不确定您可以使用哪些模块,无论您使用什么模块,都将其封装到自己的服务中,以便数据访问与应用程序逻辑和UI完全分离

  

由于角度的双向数据绑定,在制作套接字服务器时我应该注意什么?

只要你做了aboce,你就不用担心双向绑定了。在您的控制器(将范围绑定到视图)中,使用该服务获取数据并更新范围以正确更新UI。