【问题标题】:Determine if opened as dialog in prompt确定是否在提示中作为对话框打开
【发布时间】:2020-04-20 10:21:28
【问题描述】:

我正在开发一个 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;
    }
  }

所以组件Tree 现在已成功加载并显示。现在的问题是如何确定TreeComponent 是否作为对话框打开。

我正在考虑的方式是将任意参数传递给它,如果参数为真,则状态为对话框,否则不是对话框:

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

但我认为也许还有更好的方法来做到这一点。例如从 DialogService 询问我是否是一个对话框。那么还有哪些其他解决方案,哪个更好呢?

【问题讨论】:

  • 我认为将这些数据作为参数(给模型)发送的解决方案是一个非常好的选择。您可以利用相同的方法以这种干净的方式传递所有类型的数据。

标签: aurelia aurelia-dialog


【解决方案1】:

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

this.dialogService.hasOpenDialog
this.dialogService.hasActiveDialog

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

【讨论】:

  • 好答案 Henrik。我终于找到了另一种更准确的方法,我会尽快发布。
【解决方案2】:

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

  attached() {
    this._isDialog = Boolean(this.dialogController.settings);
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2018-07-06
    • 2011-03-19
    • 1970-01-01
    • 2012-01-24
    相关资源
    最近更新 更多