2016-09-01 12 views
5

Jestem nowy dla kątowego js i korzystania z usługi xmpp z kątowym js, mam sytuację, w której muszę wysłać pisanie, gdy użytkownik zaczyna pisać w polu wprowadzania i wstrzymać, gdy użytkownik przestaje pisać.Angular js wpisywanie pola i pauzy

Mam podstawowe pojęcia, że ​​muszę użyć $ limit czasu i mają jedną zmienną jak vm.isTyping = false;

Ja też napisałem jakieś platformy samo.

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

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

Jest to kod pole wejściowe:

<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 /> 

Problem jestem stoi to, że nie mogę wysłać wpisywania za każdym razem, gdy użytkownik naciśnie dowolny klawisz, jeden wpisując wysyłany jest na pierwszym naciśnięciu przycisku Potem powinno wyślij pauzę, gdy użytkownik przestanie pisać.

Czy ktoś może mi pomóc w implementacji kodu w kanciastym js, aby to osiągnąć.

+0

myślę, że trzeba korzystać z zegarka i usunąć zwłoki czasowej. –

+0

Czy chcesz tylko śledzić, czy użytkownik pisze? Lub próbujesz załadować dane, gdy użytkownik pisze np. filtrowane wyszukiwanie lub coś podobnego? –

+0

Chcę tylko wiedzieć, kiedy użytkownik pisze, a jeśli pisze, muszę wysłać "Pisanie" na serwer, a więc dalej, jeśli przestanie pisać, muszę wysłać "Wstrzymane" – Pratswinz

Odpowiedz

1

To, co możesz wypróbować, to atrybut ng-keyup zawarty w tobie input. Więc kiedy użytkownik zaczyna pisać, ustawiasz flagę vm.isTyping = true. Gdy użytkownik przestanie pisać, będzie miał timeout w twoim handlerze ng-keyup, który ustawi po pewnym czasie vm.isTyping = false. Patrz poniższy kod snipet

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>

Powiązane problemy