javascript - 从服务器推送 websocket 数据后 Angularjs 模型发生变化

标签 javascript websocket angularjs socket.io

我正在尝试在从服务器推送 websocket 后更改我的 Angular 模型。每次服务器提供新数据时,如何更改 $scope.contacts 等值......?

我不确定使用 $apply 是否可行。我知道我可以访问 DOM 元素检索范围然后更改值,但应该有更好的解决方案!

我对无需创建 Angular 模块即可从外部更新 Angular 模型的解决方案非常感兴趣,因为我使用的是发出更改事件的相关数据源。有没有像在 Backbone.js 中那样的简单方法,您可以在其中说:

var book = new Backbone.Model({ title: 'value' });
book.set("title", "A Scandal in Bohemia");

我想要的 angularjs 是这样的:

function MyController($scope) {
    $scope.contacts = [];
}

datasource changed -> function () {
    MyController.set('contacts', 'value'); // change angular scope property
}

最佳答案

查看 socket.io Angular 服务:

angular.module('app')
  .factory('socket', ['$rootScope', 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);
            }
          });
        })
      }
    };

  }]);

和使用它的 Controller :

angular.module('app')
  .controller('Controller', ['$scope', 'socket', function ($scope, socket) {

    socket.emit('register')

    socket.on('register', function (data) {
        $scope.data = data;
    });

}]);

关于javascript - 从服务器推送 websocket 数据后 Angularjs 模型发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14702981/

相关文章:

javascript - AngularJS:过滤器多次触发,值通常是未定义的

javascript - 如果选择了单选按钮则显示字段

java - 我可以在 Java Swing 上使用 websocket 吗?

javascript - AngularJS:使用 ng-show/hide 动态维护下拉列表的 3 种状态(进行中、成功、错误)?

haskell - 无法将多个客户端与 Haskell Websocket 服务器一起使用

android - 从客户端(iOS 和 Android)向 Sails.js 服务器发送套接字请求

angularjs - 使用 WebAPI 对 ng-grid 进行服务器端分页+过滤+排序

Javascript/jQuery 两个日期选择器计算日期范围

javascript - 在浏览器中使用 nconf?

javascript - postcss 正在处理/css/app.css 并在导入 vue2-daterange-picker 后抛出 CssSyntaxError