我有一个搜索输入,我只想在用户触摸或输入输入字段时触发this.searchProperties.emit
,我不想在视图初始化后触发它。我只想在用户触摸或输入字段时发出。
目前的问题是它在视图初始化后调用发射。感谢您的任何想法或帮助。
html代码
<mat-form-field id="property-list-filter" appearance="fill">
<mat-label style="font-size:12px">Filter properties</mat-label>
<input matInput #searchInput placeholder="Ex. Property ID" #input>
</mat-form-field>
ts代码片段
@ViewChild('searchInput') searchInput: ElementRef;
ngAfterViewInit() {
this.dataSource.sort = this.sort;
this.dataSource.paginator = this.paginator
fromEvent<any>(this.searchInput.nativeElement, 'keyup')
.pipe(
map((event) => event.target.value),
startWith(''),
debounceTime(500),
distinctUntilChanged(),
switchMap(async (search) => {
this.searchProperties.emit(this.searchInput.nativeElement.value.trim().toLowerCase())
})
)
.subscribe({ complete: noop });
}
2条答案
按热度按时间62lalag41#
我建议你,使用ngModel和ngModelChange
check this link
xpcnnkqh2#
首先,从管道中删除
startWith
,它在第一次初始化时触发一个emit。为了跟踪
input
事件,您必须使用Angular event binding
侦听它,如下所示:在ts文件中:
为了侦听用户输入-touch,您可以以相同的方式侦听
focus
事件或其他符合您需要的事件。另外,我推荐你使用Angular的
ReactiveForms
API来管理输入状态。你会发现你需要的一切都在一个聪明和React的方式。这里是一个link。