0

У меня есть службы со следующим кодом:

.service('ChatService', function() { 
    return { //Gets Data from controller 
    sendData: function(data) { 
     this.chatData = data; 
     console.log('this.chatData: '+this.chatData); 
    }, 
    chats: this.chatData, 
    getChats: function() { 
     return this.chatData; 
    }, 
    getChat: function(chatId) { 
     for(i=0; i<this.chats.length; i++) { 
     if (this.chats[i].id == chatId) { 
      return this.chats[i]; 
     } 
     } 
    } 
    } 
}) 

Важным моментом здесь является то, что SendData извлекает данные

[{id: 1, message: "Chat Message 1"},{id: 2, message: "Message 2"}] 

от контроллера. Затем getChats в сервисах называется $scope.chats = ChatService.getChats(); тем же контроллером, что и в шаблоне. Когда этот пункт щелкнул новую страницу с дополнительной информацией, это показать, следовательно, функцию getChat и getChats. код в контроллер для загрузки страницы, больше деталей

$scope.chatId = $stateParams.chatId; 
$scope.chat = ChatService.getChat($scope.chatId); 

Однако я получаю ошибки не может прочитать свойство длины не определено. Теперь, если я изменю chats: this.ChatData в услугах

chats: [{id: 1, message: "Chat Message 1"},{id: 2, message: "Message 2"}] 

Он работает как шарм, но мне нужно, чтобы отобразить в реальном времени, что находится в контроллере, потому что я скачивании и получать информацию от сервера, на котором будет обновляется в режиме реального времени для чата.

+0

вы должны использовать SignalR чтобы есть ответ в режиме реального времени [signalr] (https://github.com/JustMaier/angular-signalr-hub) – Maher

ответ

0

Используйте angular.copy обновить ссылки:

app.service('ChatService', function() { 
    //Gets Data from controller 
    this.sendData = function(data) { 
     //this.chatData = data; 
     //console.log('this.chatData: '+this.chatData); 
     //Use angular.copy 
     angular.copy(data, this.chats); 
    }; 
    this.chats = []; 
    this.getChats = function() { 
     return this.chats; 
    }; 
    this.getChat = function(chatId) { 
     for(i=0; i<this.chats.length; i++) { 
     if (this.chats[i].id == chatId) { 
      return this.chats[i]; 
     }; 
     }; 
    }; 
}); 

С помощью angular.copy обновить ссылку на массив, контроллеры, которые ранее выбираемые ссылки будут обновлены.

Для получения дополнительной информации см AngularJS angular.copy API Reference.

Смежные вопросы