AngularJS和Socket.IO模型未在事件中更新

时间:2015-07-05 07:14:28

标签: angularjs socket.io

这是我的控制器。

  app.controller('ChatController', function ()
  {
    this.username = '';

    this.setUsername = function (username)
    {
      this.username = username;
    };

    socket.on('success', (function (controller)
    {
      return function(username)
      {
        $('#password_page').fadeOut();
        controller.setUsername(username);
        $('#chat_page').removeClass('hidden').show();
      };
    })(this));
  });

问题是当事件'success'以用户名correclty作为参数传递时,我的控制器中的this.username不会更新。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

Angular并不知道soketio事件,因此当它发生时不会运行摘要周期。您需要手动触发此过程:

app.controller('ChatController', function ($scope) {
    this.username = '';

    this.setUsername = function (username) {
        this.username = username;
    };

    socket.on('success', (function (controller) {
        return function (username) {
            $('#password_page').fadeOut();
            controller.setUsername(username);
            $('#chat_page').removeClass('hidden').show();
            $scope.$apply();
        };
    })(this));
});

关于代码中的另一个问题。我建议在你的项目中摆脱jQuery,或者至少将它的用法仅限于指令,更多的是Angular-way。像这样的行:

$('#password_page').fadeOut();
使用Angular应用程序

不是很好的方法。改为使用ngShow / ngHide指令。