类型错误:$ scope.messages.push不是一个函数
问题描述:
我在我的火力地堡离子应用聊天的整合工作,我尝试以显示消息:
- 发送
- 从前一时间
到目前为止,我没有问题检索以前的消息,它们很好地显示,或者我没有问题提交新消息。
无论其我想不出在同一时间做BOTH功能的一种方式。
如果我用下面的代码,我有这样的错误:
TypeError: $scope.messages.push is not a function
任何想法?
这里是我有我的控制器代码:
.controller('Messages',['$scope', '$ionicScrollDelegate', '$timeout', '$firebaseArray', 'CONFIG', '$document', '$state', function($scope, $ionicScrollDelegate, $timeout, $firebaseArray, CONFIG, $document, $state) {
$scope.hideTime = false;
var myId = firebase.auth().currentUser.uid;
var otherId = "0LhBcBkECAXn6v12lA2rlPIsQNs2";
var discussion = myId + otherId;
var isIOS = ionic.Platform.isWebView() && ionic.Platform.isIOS();
//Recieve messages
var ref = firebase.database().ref('/messages/' + discussion);
ref.orderByChild("timestamp").on("value", function(snapshot1) {
console.log(snapshot1.val() + "HEY");
$scope.messages = snapshot1.val();
})
//Send messages
$timeout(function(){
$scope.sendMessage = function() {
var d = new Date();
var g = new Date();
d = d.toLocaleTimeString().replace(/:\d+ /, ' ');
g = g.toLocaleTimeString().replace(/:\d+ /, ' ') + new Date();
$scope.messages.push({
userId: myId,
text: $scope.data.message,
time: d
});
$scope.sendMessages = firebase.database().ref('/messages/' + discussion).push({
userId: myId,
text: $scope.data.message,
time: d,
timestamp: g
});
console.log($scope.messages);
delete $scope.data.message;
$ionicScrollDelegate.scrollBottom(true);
};
$scope.inputUp = function() {
if (isIOS) $scope.data.keyboardHeight = 216;
$timeout(function() {
$ionicScrollDelegate.scrollBottom(true);
}, 300);
};
$scope.inputDown = function() {
if (isIOS) $scope.data.keyboardHeight = 0;
$ionicScrollDelegate.resize();
};
$scope.closeKeyboard = function() {
// cordova.plugins.Keyboard.close();
};
$scope.data = {};
$scope.myId = myId;
$scope.messages = [];
})
}]);
这里是代码为我HTML:
<ion-view view-title="Chat Detail">
<ion-content class="padding" start-y="430">
<!-- *messages/content messages -->
<ol class="messages">
<!-- *self/container self messages -->
<li ng-repeat="message in messages" ng-class="{other: message.userId != myId}" class="self">
<!-- *avatar/avatar image -->
<div class="avatar">
<img src="img/82.jpg">
</div>
<!-- *msg/messages -->
<div class="msg">
<p>{{ message.text }}</p>
<time>
<i class="icon ion-ios-clock-outline"></i>
{{message.time}}
</time>
</div>
</li>
</ol>
</ion-content>
<!-- *bar-detail/color bar and input -->
<ion-footer-bar keyboard-attach class="item-input-inset bar-detail">
<label class="item-input-wrapper">
<input type="text" placeholder="Type your message" on-return="sendMessage(); closeKeyboard()" ng-model="data.message" on-focus="inputUp()" on-blur="inputDown()" />
</label>
<a class="button button-icon icon ion-arrow-return-left" ng-click="sendMessage()" ></a>
</ion-footer-bar>
谢谢你的忠告并提前评论! 19小时后发现
答
解决方案,那么可笑:
我得摆脱代码的那部分。
$scope.messages.push({
userId: myId,
text: $scope.data.message,
time: d
});
,并确保获取消息的价值是为了与火力地堡的实时数据库作用于“上”,而不是“曾经”。