我有一个回调函数,该函数将一些数据返回给组件。
export class AppComponent {
constructor(
private service: AppService
) {
this.processSomething(true);
this.processSomething(false);
}
private processSomething(isZoom: boolean = false) {
this.service.handleAsyncResponses(
this,
this.processDataReceived
);
}
private processDataReceived(
attributeValueList: any,
isZoom?: boolean
) {
console.log("isZoom:", isZoom);
}
}
我需要从组件发送一些值isZoom参数,并在console.log("isZoom:", isZoom)
中访问它。现在console.log是未定义的loggin。
此处是一个工作示例:https://stackblitz.com/edit/angular-service-oqkfmf?file=app/app.component.ts
答案 0 :(得分:2)
我认为您会迷路。
我可以自由地清除未使用的代码中的堆栈闪电,并向您展示如何使用回调:you can check it there。
让我们从组件开始:
constructor(
private service: AppService
) {
this.processSomething(true);
this.processSomething(false);
}
private processSomething(isZoom: boolean = false) {
this.service.handleAsyncResponses(isZoom, this.processDataReceived);
}
private processDataReceived(isZoom: boolean) {
console.log("isZoom:", isZoom);
}
您无需将参数定义为可选参数,因为您为isZoom
值提供了默认值,因此始终可以对其进行定义。
如您所见,您不需要将完整的对象作为参数传递:可以在没有该函数的情况下调用该函数。
在您的服务中,您所剩下的就是
public handleAsyncResponses(zoom: boolean, callback: Function) {
callback(zoom);
}
就像在任何其他上下文中一样简单地调用该函数。只需使用参数名称(此处为this.processDataReceived(zoom)
)重命名callback
。
这是处理回调的方式。
答案 1 :(得分:1)