angular - 重新触发服务调用以重复异步请求
问题描述
想象一下 Angular 组件中显示的用户列表。我注入我的服务并在我的模板中订阅它。
我还有一个对话框,您可以在其中将用户添加到我的表中。添加并关闭我的对话框后,我想通过重新触发服务调用来刷新表。
零件:
export class UserComponent implements OnInit {
public users$!: Observable<User[]>;
constructor(
public dialog: MatDialog,
private userService: UserService,
) {}
public ngOnInit() {
this.users$ = this.userService
.getAllUsers$()
.pipe(take(1));
}
public openAddUserDialog() {
this.dialog
.open(AddUserDialogComponent)
.afterClosed()
.subscribe(() => {
// TODO re-trigger observable here?
});
}
}
模板:
<p *ngFor="user of users$ | async">{{ user.name }}</p>
如何afterClosed()
从对话框中重新触发函数中的服务调用?我不想在我的订阅中订阅这个。
我相信必须有一种模式可以将 的返回值getAllUsers$()
与另一个 Observable 结合起来,然后在那里推送一些东西,然后重新触发该过程。
解决方案
不知道这是否是最佳做法,但你可以试试这个:
export class UserComponent implements OnInit {
public users$!: Observable<User[]>;
constructor(
dialog: MatDialog,
private userService: UserService,
) {}
ngOnInit() {
this.getUsers();
}
openAddUserDialog() {
this.dialog
.open(AddUserDialogComponent)
.afterClosed()
.pipe(
filter(user => !!user), // Avoid closing modal without creating a new user
tap(() => this.getUsers()))
.subscribe();
}
getUsers() {
this.users$ = this.userService
.getAllUsers$()
.pipe(take(1));
}
}
推荐阅读
- leaflet - geojson 点数据标记未在传单地图中聚类
- java - 在当前路径中添加目录
- django - 无法使用 get_object_or_404 获取对象(实际存在)
- elasticsearch - 当段不时更改时,相同的文档集合是否会使用 TopScoreCollector 返回 TopN 文档
- ruby - Ruby 的 Regexp 插值是否会泄漏内存?
- r - 将字符列表转换为数据框的简单(或实用)方法?
- excel - 如何将值从一个用户窗体的代码传递到另一个
- ruby-on-rails - bundle exec 应该找到一个全局宝石吗?
- jquery - 询问时引导选择选择器未重置为默认值
- delphi - 如何解析证书主题字符串?