2016-05-22 11 views
0

ich eine ngFormControl für ein Suchfeld, die ich abonniert haben, wie folgt:Abbrechen eines ngFormControl Ereignis Brennen

this.searchTerm.valueChanges 
    .debounceTime(400) 
    .distinctUntilChanged() 
    .switchMap(searchTerm => this.locationSearchService.search(searchTerm)) 
    .subscribe(items => { doSomethingPartiallyInteresting() }) 

Unter bestimmten Umständen möchte ich das Brennen des .valueChanges Veranstaltung abzusagen. Weiß jemand, ob das unmöglich ist?

+0

Was meinen Sie durch Löschen? Nach welchen Kriterien wird die Veranstaltung abgesagt? –

+1

Durch die Aufhebung meine ich zu verhindern, dass es zeitweilig abfeuert. Um mehr Kontext zur Verfügung zu stellen, ist dieses Feld ein Typahead-Feld für eine Adresse. Wenn ein Benutzer eine Adresse eingibt, soll das Ereignis .valueChanges ausgelöst werden. Wenn ein Benutzer jedoch eine Adresse aus der Liste der Übereinstimmungen auswählt, soll das Ereignis .valueChanges nicht ausgelöst werden, da die ausgewählte Adresse nicht erforderlich ist nach dem locationSearchService gesucht. Ich habe eine Methode in der Komponente namens selectAddress - hier hoffte ich zu sagen, feuern Sie nicht das .valueChanges-Ereignis, aber wenn der Benutzer mehr in das Suchfeld eingibt, dann wieder auf Änderungen zu hören. – Ben

Antwort

0

Vielleicht könnten Sie die filter Betreiber dafür nutzen:

this.searchTerm.valueChanges 
    .debounceTime(400) 
    .distinctUntilChanged() 
    .filter(() => { // <------------ 
    return !(this.address === 'don't handle this address'); 
    }) 
    .switchMap(searchTerm => this.locationSearchService.search(searchTerm)) 
    .subscribe(items => { doSomethingPartiallyInteresting() }) 
+0

Brilliant. Danke Thierry, deine Lösung hat funktioniert. In meiner selectAddress() - Funktion speichere ich die ausgewählte Adresse in dieser ausgewählten Adresse, die dann mit dem tatsächlichen Feldwert im Filter verglichen wird. – Ben

Verwandte Themen