2016-09-01 86 views
5

我是新來的角js和使用xmpp服務與角js,我有一種情況,當用戶開始在輸入框中鍵入並在用戶停止輸入時暫停時,我需要發送輸入。角js輸入框打字並暫停

我有我需要使用$超時,並有像vm.isTyping = false;

我也寫了某種形式的平臺,爲同一個變量的基本思想。

vm.isTyping = false; 
vm.checkTyping = function(){ 
    $timeout(function() { 
     vm.isTyping = true; 
    },2000); 

    if(!vm.isTyping){ 
     vm.sendTyping(); 
    } else{ 
     // 
    } 
}; 

這是輸入域代碼:

<input type="text" placeHolder="Type a message here" 
    ng-model="vm.newMessage" 
    ng-blur="focusRemove(vm.newMessage,vm.contact)" 
    ng-change="vm.checkTyping()" 
    ng-model-options="{'debounce': 500}" 
    ng-keydown="vm.onKeyDown($event)" auto-focus /> 

我現在面臨的問題是,我不能發送當用戶按下任意鍵鍵入每次,一個打字第一次按鍵發送的話,我應該當用戶停止輸入時發送暫停。

任何人都可以幫助我在角度js中實現代碼來實現此目的。

+0

我認爲你需要使用的手錶,並刪除反跳。 –

+0

你只是想跟蹤用戶是否打字?或者您是否嘗試以用戶輸入的方式加載數據過濾搜索或類似的東西? –

+0

我只想知道用戶何時打字,如果他打字我需要發送「打字」服務器,因此如果他停止打字,我需要發送「已暫停」 – Pratswinz

回答

1

你可以嘗試的是有ng-keyup屬性包含在你的input標籤。所以當用戶開始輸入時,你可以設置標誌vm.isTyping = true。當用戶停止打字時,您的ng-keyup處理程序中有timeout,那麼在某段時間後將設置vm.isTyping = false。請參閱下面的一小段代碼片段

function myappCtrl($scope, $timeout) { 
 
    var timoutPromise = null; 
 
\t \t $scope.newMessage = ""; 
 
    $scope.isTyping = false; 
 
    
 
    $scope.checkTyping = function() { 
 
    \t $scope.isTyping = true; 
 
     if(timoutPromise) { 
 
      $timeout.cancel(timoutPromise); 
 
     } 
 
    } 
 
    
 
    $scope.stoppedTyping = function() { 
 
    \t timoutPromise = $timeout(function() { 
 
     $scope.isTyping = false; 
 
     }, 2000) 
 
    \t 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app> 
 
<div ng-controller="myappCtrl"> 
 
    <input type="text" placeHolder="Type a message here" ng-model="newMessage" ng-change="checkTyping()" ng-keyup="stoppedTyping()"/> 
 
    <div ng-if="isTyping"> 
 
    typing 
 
    </div> 
 
</div> 
 
</div>