css ngBootstrap模态不显示,除非在第二次单击后

fdbelqdn  于 2023-03-05  发布在  Bootstrap
关注(0)|答案(2)|浏览(207)

我创建了一个模态组件ImportCardModalComponent,登录失败后必须打开这个组件,如下所示:

this.authSerivce.logInRegular(this.model).then(result => {
      console.log(result);
    }, error => {
      var importModal = this.modalService.open(ImportCardModalComponent);

    });

问题是对话框不会出现,除非我点击屏幕上的按钮两次,并激发服务两次。第一次我点击按钮,DOM元素添加成功,但没有css class<ngb-modal-backdrop> and <ngb-modal-window>中。如下图所示。

第二次我点击按钮,classes显示正确。如下图所示:

模态必须有class ="modal-backdrop fade show"在背景元素。以及class="modal fade show d-block"在窗口元素。
我尝试使用modalService与NgbModalOptionsbackdropClasswindowClass没有任何成功的工作,从第一次。
如果我将开放模式服务移到拒绝回调之外,它就可以正常工作。
任何帮助都是非常感谢的。

r6vfmomb

r6vfmomb1#

一种方式是在模态服务调用之后手动触发变化检测。
获取ApplicationRef的引用

constructor(private appRef: ApplicationRef,...){}

然后调用变化检测:

this.authSerivce.logInRegular(this.model).then(result => {
      console.log(result);
    }, error => {
      var importModal = this.modalService.open(ImportCardModalComponent);
      this.appRef.tick();
    });
8ehkhllq

8ehkhllq2#

您可以通过在ngZone内运行代码来强制执行Angular 变化检测

import { NgZone } from "@angular/core";

...

constructor(private _ngZone: NgZone){}

...

this._ngZone.run(() => this.modalService.open(ImportCardModalComponent));

相关问题