Угловая обязательная ошибка

0

У меня есть фабрика "Чат", которая подключается к моему серверу nodejs через socket.io и отправляет сообщение серверу.

.factory('Messages', function($ionicScrollDelegate){
    var messages = [];
    return {
      getMessages : function(){
        return messages;
      },
      setMessage : function(msg){
        messages.push(msg);
      }
    }
  })    
.factory('Chat', function(Socket, Messages){
    Socket.on('onChat', function(data){
       if (data.from !== username){
          Messages.setMessage({username : data.from, message : data.msg});
       }
    });
    return : {
       sendMessage: function(msg){
          Messages.setMessage({
             username: username,
             message: msg
          });
          Socket.request(route, {
             rid: 'AA',
             content: msg,
             from: username,
             target: '*'
          }, function() {
          });
    }

и мой контроллер проверяет сообщения об ошибках с завода.

.controller('livePageCtrl', function($scope, Messages, Chat){
   $scope.data = {};
   $scope.data.message = "";
   $scope.messages = Messages.getMessages();
   $scope.sendMessage = function(msg){
      Chat.sendMessage(msg);
      $scope.data.message = "";
   };
});

и моя форма просмотра

<div class="chat">
   <div class="row" ng-repeat="message in messages track by $index">
      <div class="col col-100"">
         {{message.message}}
      </div>
    </div>
 </div>
 <input ng-model="data.message" type="text" placeholder="Chat to Room">
 <button type="submit" ng-click="sendMessage(data.message)"></button>

Когда я набираю сообщение и нажимаю кнопку для отправки обновленных сообщений arr, и я могу видеть сообщение в DOM, но если я получаю новое сообщение с сервера, мои сообщения arr обновляются, но DOM не обновляется. Только после того, как я начну печатать новое сообщение DOM, и я вижу входящее сообщение. Что я делаю неправильно? Почему мой DOM не обновляется после нового сообщения с сервера? Спасибо всем! И извините за мой английский)

  • 1
    Что такое Socket ?
  • 0
    сервис, который возвращает сокет соединение
Теги:
ionic

1 ответ

1
Лучший ответ

Проблема здесь в том, что цикл $digest не запускается, скорее всего, потому, что Angular не знает, когда из сокета поступают новые элементы. Угловой нормально запускает цикл $digest автоматически, например, когда ng-click запущен или разрешен вызов $http. Однако в этом случае вам нужно будет вручную вызвать этот процесс.

Можешь попробовать:

Socket.on('onChat', function(data){
   if (data.from !== username){
      $timeout(function(){
          Messages.setMessage({username : data.from, message : data.msg});
      });          
   }
});

Не забудьте импортировать $timeout на свой чат-завод.

  • 0
    Большое спасибо! Помогло :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню