2016-05-22 6 views
0

У меня есть ngFormControl для поля поиска, которые я подписался следующим образом:Отмена события ngFormControl обжиг

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

В определенных обстоятельствах я хочу, чтобы отменить .valueChanges событие стрельбы. Кто-нибудь знает, если это невозможно?

+0

Что вы имеете в виду, отменяя? Каковы критерии отмены мероприятия? –

+1

Отменяя, я имею в виду, что это временно не срабатывает. Чтобы предоставить больше контекста, это поле является полем типа head для адреса. Когда пользователь вводит адрес, я хочу, чтобы событие .valueChanges запускалось, однако, когда пользователь выбирает адрес из списка совпадений, я не хочу, чтобы событие .valueChanges запускалось, потому что я не требую, чтобы выбранный адрес был посмотрел на locationSearchService. У меня есть метод в компоненте под названием selectAddress - здесь я надеялся сказать, что не запускает событие .valueChanges, но если пользователь вводит больше в поле поиска, тогда возобновите прослушивание изменений. – Ben

ответ

0

Может быть, вы могли бы использовать в filter оператор для этого:

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

Блестящий. Спасибо Тьерри, ваше решение сработало. В моей функции selectAddress() я сохраняю выбранный адрес в this.selectedAddress, который затем сравнивается с фактическим значением поля в фильтре. – Ben

Смежные вопросы