对于角度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中的代码来实现这一点。
答案 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>