Angular 2-在服务中创建警报

时间:2018-09-02 13:41:42

标签: angular typescript

我有此警报:

contractorService.ts:

public showConfirm(title: string, message: string, cancelBtnTxt: string, confirmBtnTxt: string, confirmFunc: any, cancelFunc: any): void {
    console.log("confirmFunc: ", confirmFunc);
    const confirm = this.alertCtrl.create({
      title: title,
      message: message,
      buttons: [
        {
          text: cancelBtnTxt,
          handler: () => {
            cancelFunc();
          }
        },
        {
          text: confirmBtnTxt,
          handler: () => {
            confirmFunc();
          }
        }
      ]
    });
    confirm.present();
  }

我有一项服务,我想可能需要从其他地方打电话给我。如何传递带有参数的确认和取消功能。

requestComponent.ts:

public test(): void {
    console.log('test');
}

requestComponent.ts:中的其他功能

someFunc(): void {
    this.service.showConfirm('title', 'message', 'Cancel', 'OK, this.test, null);
}

以上方法有效,但后来我尝试了:

public test(param: any): void {
    console.log('test: ', param); // param is undefined.
}

someFunc(): void {
    this.service.showConfirm('title', 'message', 'Cancel', 'OK, this.test.bind('test param'), null);
}

但我得到:测试:未定义

3 个答案:

答案 0 :(得分:1)

您应按以下方式传递参数:

this.service.showConfirm('title', 'message', 'Cancel', 'OK', this.test.bind(this, 'Yes'), null);

注意参数this.test.bind(this, 'Yes')。您应该将this上下文(组件)传递给被调用的函数,因为您的test方法存在于组件上。

答案 1 :(得分:1)

您也可以尝试以下操作:

this.service.showConfirm('title', 'message', 'Cancel', 'OK, () => this.test('test param'), null);

我总是觉得这是做这种事情的最优雅的方式。

答案 2 :(得分:0)

this.contractorService.showConfirm("Continue?", "Your credit card will be charged", "Cancel", "OK", this.test.bind(this.test, 'a'), this.cancel);

所以我想我们需要传递一个带有参数的函数。以上正在工作。