1

我在我的火力地堡離子應用聊天的整合工作,我嘗試以顯示消息:

  1. 發送
  2. 從前一時間

到目前爲止,我沒有問題檢索以前的消息,它們很好地顯示,或者我沒有問題提交新消息。

無論其我想不出在同一時間做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小時後發現

回答

0

解決方案,那麼可笑:

我得擺脫代碼的那部分。

$scope.messages.push({ 
     userId: myId, 
     text: $scope.data.message, 
     time: d 
     }); 

,並確保獲取消息的價值是爲了與火力地堡的實時數據庫作用於「」,而不是「曾經」。