Angular中如何在Observable数据就绪后正确调用指定回调函数
开发背景与遇到的问题
我是Angular与Observable的开发新手,目前在HomePage组件开发中遇到如下问题:
- 我调用了封装好的业务服务,该服务内的
http.get请求会直接返回Observable实例 - 组件模板中对服务返回的
data$流使用async管道完成数据渲染 - 我需要在
ngOnInit生命周期中定义一个无返回值的函数,要求在data$拿到接口返回数据后,读取返回数据中的userId字段完成对应业务逻辑,一直没有找到正确的实现方式。
现有代码示例
HomePage.ts
export class HomePage implements OnInit { data$: Observable<any>; ngOnInit(): void { // 此处需要拿到接口返回的userId this.data$ = this.dataService.getMyData(); // 不知道怎么在data$拿到返回数据后再调用这个方法 this.sendMessage(data.userId); } sendMessage(data.userId){ // 传入userId完成发送逻辑 } }
HomePage.html
<app-homepage form="true" *ngIf="{ data: data$ | async} as myData"> <div *ngIf="data.userId"> <!-- 其余页面渲染逻辑 -->
已尝试的方案及问题表现
我之前用管道搭配tap操作符实现逻辑,但是每次在页面上做交互操作(比如点击复选框、输入内容)时,都会多次触发sendMessage()调用,不符合预期,对应代码如下:
this.data$ = this.dataService.getMyData().pipe( tap((data) => { this.sendMessage(data.userId); console.log("in pipe") // 我发现点击复选框等交互操作时,这里会多次执行 }));
内容的提问来源于stack exchange,提问作者Pontchik
相关产品推荐
相关产品推荐

