У меня есть таблица данных, данные которой обновляются после обновления одного из ее элементов.
Для запуска обновления данных я отправляю событие:
updateEvent = new EventEmitter<{ value: User }>();
refreshListForUser(user: User) {
this.updateEvent.emit({
value: user
});
}
И это событиеобрабатывается следующим образом:
merge(this.updateEvent, this.searchTermEvent, this.sort.sortChange, this.paginator.page)
.pipe(
startWith({}),
switchMap(() => {
this.isLoadingResults = true;
return this.getUsers(this.searchTerm, this.sort.active, this.sort.direction, this.paginator.pageIndex);
}),
map((usersApi: UsersApi) => {
this.isLoadingResults = false;
this.isRateLimitReached = false;
this.currentPageNumber = usersApi.currentPageNumber;
this.elementsPerPage = usersApi.elementsPerPage;
this.totalElements = usersApi.totalElements;
this.totalPages = usersApi.totalPages;
return usersApi.users;
}),
catchError(() => {
this.isLoadingResults = false;
this.isRateLimitReached = true;
return observableOf([]);
})
).subscribe((users: User[]) => {
this.dataSource.data = users;
});
}
Работает как положено, данные обновляются все в порядке и список обновляется.
Но как получить объект пользователя, переданный в событии?
И должен ли я использовать источник событий для такого случая использования?В конце концов, это все в одном классе.
У меня тот же вопрос с другим подобным событием в том же классе компонентов.
Было бы неплохо получить строку поиска из события поиска, вместо этогоиспользования переменной-члена:
searchTermEvent = new EventEmitter<{ value: string }>();
searchTerm: string;
search(searchTerm: string) {
this.searchTerm = searchTerm;
this.searchTermEvent.emit({
value: this.searchTerm
});
if (this.paginator) {
this.paginator.firstPage();
}
}