Aurelia 确定是否在提示中作为对话框打开

Aurelia 确定是否在提示中作为对话框打开,aurelia,aurelia-dialog,Aurelia,Aurelia Dialog,我正在开发一个aurelia应用程序。我有一个组件(这是一个完整的页面组件,可以导航),在另一个页面中,我想使用这个组件作为提示,让用户从该页面中进行选择。因此,我编写了下面的代码以按预期打开它: selectTaskFromTree(callbackOrSuccess, failure) { const dialog = this.dialogService .open({ viewModel: PLATFORM.moduleName('features/view/tree

我正在开发一个aurelia应用程序。我有一个组件(这是一个完整的页面组件,可以导航),在另一个页面中,我想使用这个组件作为提示,让用户从该页面中进行选择。因此,我编写了下面的代码以按预期打开它:

selectTaskFromTree(callbackOrSuccess, failure) {
    const dialog = this.dialogService
      .open({ viewModel: PLATFORM.moduleName('features/view/tree/tree'), model: {}, lock: false });

    if (callbackOrSuccess) {
      if (failure) {
        dialog.whenClosed(response => {
          if (!response.wasCancelled) {
            callbackOrSuccess(response.output);
          } else {
            failure(response);
          }
        });
      }
      else{
        dialog.whenClosed(callbackOrSuccess);
      }
      return;
    }
    else{
      return dialog;
    }
  }
因此,组件
现在已成功加载并显示。现在的问题是如何确定
TreeComponent
是否作为对话框打开

我考虑的方法是将任意参数传递给它,如果参数为true,则状态为dialog,否则不为dialog:

  const dialog = this.dialogService
      .open({ viewModel: PLATFORM.moduleName('features/view/tree/tree'), model: {isDialog: true}, lock: false });

但我想也许还有更好的方法。例如,从DialogService询问我是否是对话。那么,还有哪些解决方案,哪一个更好呢?

要确定您是否有一个打开的(或活动的)对话框,您可以询问相关字段的
DialogService

this.dialogService.hasOpenDialog
this.dialogService.hasActiveDialog

遗憾的是,这无法告诉您哪个对话框处于打开状态。我认为您将参数传递给模型的想法同样有效。

我已经考虑过不同的解决方案,我正在寻求保持低耦合并防止定义新参数。所以我写了下面的代码,我想知道这个组件是否作为对话框打开:

attached(){
this.\u isDialog=Boolean(this.dialogController.settings);
}

我认为将此数据作为参数(发送到模型)的解决方案是一个非常好的选择。您可以利用相同的方法以这种干净的方式传递所有类型的数据。我终于找到了另一种更准确的方法,我将很快发布它。