Я работаю в чате pubnub. И попытка направить новое сообщение на массив сообщений. У меня есть массив объектов почтовых сообщений, как.push не работает для angularjs и pubnub
Object {0: Object, 1: Object, 2: Object, 3: Object, 4: Object, 5: Object, 6: Object, 7: Object, 8: Object, 9: Object, 10: Object, 11: Object, 12: Object, 13: Object, 14: Object, 15: Object, 16: Object, 17: Object, 18: Object, 19: Object}
Каждый объект содержит данные, такие как
Object {content: "asd", date: "2016-08-29T05:10:41.208Z", sender_username: "siehyvar", sender_uuid: "1294553"}
теперь я пытаюсь нажать на другой объект
Object {content: "hi", sender_uuid: "1294553", sender_username: "siehyvar", date: "2016-08-29T05:47:40.232Z"}
со следующим кодом
$scope.messages: [];
scope.$on(API.getMessageEventNameFor(), function(ngEvent, m) {
scope.$apply(function() {
$scope.messages.push(m);
});
});
И ошибка я получаю
messages.push is not a function
Я полагаю, сообщения здесь массив объектов, но функция .С не работает. Может ли кто-нибудь помочь?
Позвольте мне объяснить код. Поэтому у меня есть один чат Api, где я помещаю весь код pubnub, два контроллера (для интернет-пользователей и чат) и два шаблона хворостины (для интернет-пользователей и чат)
Сообщения декларации для текущего канала ChatApi:
current_channel: {
channel_name: null,
channel_label: null,
messages: []
},
Присоединяйтесь чат событие из chatApi
joinChat: function (chat_channel,scope) {
var channel = chat_channel.channel;
var channel_name = chat_channel.name;
//Join chatroom Channel with the room name
API.chatrooms.addMe(channel);
//Get online users in chatroom
API.chatrooms.onlineMembers(channel, scope);
//API.current_channel.channel_id = channel;
API.current_channel.channel_name = channel;
API.current_channel.channel_label = channel_name;
console.log(API.current_channel.channel_name);
API.getPresenceEventNameFor();
// Listening to the callbacks for getting messages for current channel
scope.$on(API.getMessageEventNameFor(), function(ngEvent, m) {
scope.$apply(function() {
if (angular.isArray(scope.current_channel.messages)) {
scope.current_channel.messages.push(m);
}else {
console.log("Not is array");
}
});
scroller.down(500);
});
API.getHistory(channel, scope);
Twig для соединения чата с пользователем
<ul class="all-chats-list" ng-repeat="onlineUser in online.users">
<li class="col-xs-12 nopadding" ng-click="joinChat(onlineUser.chat_channel); selectMe($event);">
и сообщения показываются в виде
<li ng-repeat="message in current_channel.messages">
контроллера для соединения чата
$scope.joinChat = function(chat_channel) {
chatApi.joinChat(chat_channel, $scope);
};
Теперь, когда я звоню отправить сообщение, как
Twig:
<form ng-submit="sendMessage()">
<div class="col-xs-9 col-md-10 form-group nopadding">
<input style="width: 100%" ng-model="message.content" class="form-control" type="text" placeholder="Type your message" />
</div>
<div class="col-xs-3 col-md-2 form-group nopadding">
<button type="submit" class="form-control btn site-btn" id="send-message">Send</button>
</div>
</form>
chatApi:
sendMessage: function() {
console.log('PUBLISH TO: ' + API.current_channel.channel_name);
// Don't send an empty message
if (!API.message.content ||
API.message.content === '') {
return;
}
Pubnub.publish({
channel: API.current_channel.channel_name,
message: {
content: API.message.content,
sender_uuid: models.user.uuid,
sender_username: models.user.username,
date: new Date()
},
callback: function(m) {
//console.log(m)
}
});
// Reset the messageContent input
API.message.content = '';
},
Чат контроллер:
$scope.sendMessage = chatApi.sendMessage;
Я получаю messages.push ошибок не является функцией. Я предполагаю, что это потому, что он рассматривает его как объект, а не массив.
Надеюсь, теперь это ясно.
добавить свой HTML и функцию полного контроллера! – Aravind
как fas, так как я понимаю '$ scope.messages' не является массивом, его объектом. можете ли вы рассказать нам, как вы определили '$ scope.messages'? –
убедитесь, что $ scope.messages - это массив –