Angular js输入框输入并暂停

Pra*_*inz 5 settimeout angularjs

我是角度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{
        //
    }
};
Run Code Online (Sandbox Code Playgroud)

这是输入字段代码:

<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 />
Run Code Online (Sandbox Code Playgroud)

我面临的问题是,每当用户按任意键时,我都无法发送打字,第一次按键时会发送一个打字,然后我会在用户停止输入时发送暂停.

任何人都可以帮我实现角度js中的代码来实现这一目标.

Ana*_*Pai 2

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

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)
    	
    }
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)