【问题标题】:AngularJS and Socket.IO model not being updated in eventAngularJS 和 Socket.IO 模型未在事件中更新
【发布时间】:2015-07-05 07:14:27
【问题描述】:

这是我的控制器。

  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));
  });

问题是,当事件“成功”触发并使用用户名 correclty 作为参数传递时,我的控制器中的 this.username 不会得到更新。

我该如何解决这个问题?

【问题讨论】:

    标签: angularjs socket.io


    【解决方案1】:

    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 方式。像这样的行:

    $('#password_page').fadeOut();
    

    对于 Angular 应用来说不是很好的方法。请改用ngShow/ngHide 指令。

    【讨论】:

      猜你喜欢
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      相关资源
      最近更新 更多