2015-07-05 5 views
1

Это мой контроллер.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)); 
    }); 

И проблема в том, что, когда событие «успех» пожары с именем пользователя correclty передается в качестве аргумента, this.username в мой контроллер не обновляется.

Как это исправить?

ответ

0

Угловой не знает о событиях 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 в вашем проекте или хотя бы ограничить его использование только директивами, более Угловым. Линии типа:

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

не очень хороший подход с угловым приложением. Вместо этого используйте директивы ngShow/ngHide.

+0

Большое вам спасибо, это сработало чудесно. – Valdrinit