![](/img/trans.png)
[英]jQuery function: pass callback functions as optional arguments to another function
[英]How to pass optional arguments to callback functions in typescript
我有一個回調函數,該函數將一些數據返回給組件。
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
我想你有點迷路了。
我自由地從未使用的代碼中清除了堆棧閃電,並向您展示了如何使用回調: 您可以在此處進行檢查 。
讓我們從組件開始:
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);
}
只需在任何其他上下文中調用函數即可。 只需使用參數名稱(在此為callback
)重命名this.processDataReceived(zoom)
)即可。
這就是處理回調的方式。
在您的情況下,您需要將函數調用包裝在本地閉包中:
private processSomething(isZoom: boolean = false) {
this.service.handleAsyncResponses(
this, (attributeValueList: any) => {
this.processDataReceived(attributeValueList, isZoom);
}
);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.