Angular js输入框输入并暂停

时间:2016-09-01 05:27:55

标签: angularjs settimeout

对于角度js是新手,并且使用带角度js的xmpp服务,我有一种情况,我需要在用户开始输入输入框时发送输入,并在用户停止输入时暂停。

我有基本的想法,我需要使用$ timeout,并有一个像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中的代码来实现这一点。

1 个答案:

答案 0 :(得分:2)

您可以尝试使用ng-keyup标记中包含的input属性。因此,当用户开始输入时,您可以设置标记vm.isTyping = true。当用户停止输入时,您的timeout处理程序中会有ng-keyup,这会在一段时间后设置vm.isTyping = false。请参阅以下代码snipet

function myappCtrl($scope, $timeout) {
    var timoutPromise = null;
		$scope.newMessage = "";
    $scope.isTyping = false;
    
    $scope.checkTyping = function() {
    	$scope.isTyping = true;
      if(timoutPromise) {
          $timeout.cancel(timoutPromise);
      }
    }
    
    $scope.stoppedTyping = function() {
    	timoutPromise = $timeout(function() {
        $scope.isTyping = false;
      }, 2000)
    	
    }
}
<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>