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中的代码来实现这一目标.
您可以尝试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)
| 归档时间: |
|
| 查看次数: |
659 次 |
| 最近记录: |