【问题标题】:Angular ngx bootstrap modal delayed openAngular ngx引导模式延迟打开
【发布时间】:2020-08-20 05:20:39
【问题描述】:

我正在尝试使用 ngx bootstrap 的模态创建一个进度条对话框。我目前有以下:

generateDownload(distance: DistanceSplit) {
    this.dialogWait = this.dialogs.wait('Wait');

    list.forEach((distance, index) => {
        // ...
        this.dialogWait.setProgress(i);
        // ...
    });

    return tabledata;
}

DialogsService

public wait(title: string, message: string, percentage: number, settings?: any): BsModalRef {
    // ...
    return this.modalService.show(
        DialogsComponent, 
        Object.assign({}, this.options, settings)
    );
}

问题是只有在list.forEach 循环完成时才会显示对话框。如何在执行列表之前显示对话框?有没有人有类似的问题和一些工作代码?

【问题讨论】:

  • 把list.forEach逻辑放到DialogsComponent里面怎么样?
  • @huanfeng 当然这是可能的,但我试图阻止这种情况。我想将功能保留在 DialogsComponent 之外

标签: angular ngx-bootstrap ngx-bootstrap-modal


【解决方案1】:

modalService.show 应该是一个同步方法。

你有没有用 console.log 调试过序列:

generateDownload(distance: DistanceSplit) {

    this.dialogWait = this.dialogs.wait('Wait');

    //Adding breakpoint here
    console.log('generateDownload');

    list.forEach((distance, index) => {
    ...

    this.dialogWait.setProgress(i);
    ...
    });

    return tabledata;
}

【讨论】:

  • 哦,是的,我做到了。处理顺序正确,但对话框出现太晚(在forEach完成后)
  • 尝试在console.log中添加断点,你会看到forEach没有被执行,并且显示了modal。你可以简单地在 stackblitz 上验证它。
  • 我必须更正我的答案:处理顺序不正确。处理 forEach 循环,完成后处理对话框(我使用 BsModalService onShown 进行检查)。但现在的问题是:我怎样才能让它“在线”以便首先处理对话?
  • 对话框应该在forEach之前显示,DialogsComponent的onInit方法应该在forEach之前执行。顺便说一句,不确定您的问题是否 setProgress 总是得到最后一个值?如果是,setProgress 应该是一个异步方法?
  • 我自己无法解决我的问题。似乎它与模态对话框无关,而是与我不完全理解的 Angular 的更新策略有关。我在这里创建了一个新帖子,其中包含更详细但更笼统的描述stackoverflow.com/questions/63502641/…
猜你喜欢
  • 2020-06-29
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 2017-04-23
  • 2015-11-23
  • 2019-08-05
  • 2020-10-31
  • 1970-01-01
相关资源
最近更新 更多