簡體   English   中英

如何將可選參數傳遞給TypeScript中的回調函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM