【发布时间】:2020-01-22 15:09:22
【问题描述】:
想象一下 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 连接起来,并在那里推送一些东西,然后重新触发该过程。
【问题讨论】:
-
这个问题的答案对你来说足够好了吗? stackoverflow.com/a/59846491/9880876 他们使用主题来重新触发对 API 的调用
-
我正要分享一样哈哈(我是作者)。弗洛里安,上面的链接绝对是要走的路(与你当前的架构)。如果您有一家商店(例如使用 ngrx),可能会更容易处理,但这是另一个话题 :)
-
谢谢,发布这个答案对我有很大帮助。但我选择了
reapeatWhen()方法,因为我认为它更直观和可读。也感觉算子就是为这种场景而生的。
标签: angular typescript rxjs angular-material