TypeError: $scope.messages.push is not a function
TypeError: $scope.messages.push is not a function
我正在使用 Firebase 在我的 Ionic 应用程序中进行聊天集成,我尝试显示以下消息:
- 已发送
- 是上次的
到目前为止,我可以毫无问题地检索它们显示得很好的以前的消息,或者我可以毫无问题地提交新消息。
HOWEVER 我想不出同时执行 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
});
并确保检索消息的值在“on”而不是 "once" 上,以便与 Firebase 的实时数据库一起使用。
我正在使用 Firebase 在我的 Ionic 应用程序中进行聊天集成,我尝试显示以下消息:
- 已发送
- 是上次的
到目前为止,我可以毫无问题地检索它们显示得很好的以前的消息,或者我可以毫无问题地提交新消息。
HOWEVER 我想不出同时执行 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
});
并确保检索消息的值在“on”而不是 "once" 上,以便与 Firebase 的实时数据库一起使用。