【问题标题】:How to close modal when the subscriber receive data in Angular订阅者在Angular中接收数据时如何关闭模式
【发布时间】:2018-09-21 23:23:52
【问题描述】:

我正在使用 ngx-bootstrap 模态,我想在调用异步 REST 服务时也将其用作加载模态。 所以我在调用服务之前打开它,我想在收到响应时关闭它。

示例

this.loadingModalRef = this.modalService.show(LoadingModalComponent,{initialState, keyboard: false, backdrop: 'static' });
this.myService.searchClient(data).subscribe(
  res => {
    this.loadingModalRef.hide()
  }
);

在这种情况下,模态不会关闭,但我不明白为什么。 我必须使用延迟来关闭它,这样

setTimeout(() => {
  this.loadingModalRef.hide();
 }, 200);

但是当我想在收到响应时也导航到另一个位置时,我遇到了问题。在这种情况下,模态不会关闭,不可见,但仍附加到 DOM 中的 body 元素,用户无法再与界面交互。

使用超时关闭模态是否正确? 我该如何解决我的问题?

【问题讨论】:

  • 什么模式????
  • 使用timeout不是一个好办法,因为你无法确切知道进程的时间,你有没有试过去debug?在searchClient上注册的observer打断点,可能是调用searchClient出错,在你的observer上添加错误检查
  • @Antoniossss 我正在尝试在 observable 的 subscribe 方法中关闭 ngx-bootstrap 模态

标签: angular bootstrap-modal ngx-bootstrap


【解决方案1】:

尝试将this 设置为其中。

var that = this;
setTimeout(() => {
   that.loadingModalRef.hide();
}, 200);

就我而言,它对我有用。

另一种方法是。

import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';

constructor(
    public activeModal: NgbActiveModal
) { }

然后做一个关闭模态的函数。并调用该函数。

closeModal() {
 this.activeModal.close('');
}

有关详细信息,请参阅此链接。 Link

【讨论】:

  • 感谢您的支持,但这并不能解决我的问题
  • 无论如何我不明白为什么我必须插入超时,你能解释一下吗? @萨钦
  • @Marco24690 关闭模型不需要使用超时。我只是根据你的问题举例。如您所见,我给了您两种关闭模型的方法。就我而言,两者都运作良好。所以,如果你不想使用超时,那么请选择我的第二个选项。它会在没有使用超时的情况下关闭您的模型。
  • 我用的不是ng-boostrap,而是ngx-bootstrap
【解决方案2】:

当使用 setTimeout this context 等于 window 所以你应该使用 bind

setTimeout(() => {
   this.loadingModalRef.hide();
}, 200).bind(this)

在第一个代码中这应该可以工作:

const loadingModalRef = this.modalService;
loadingModalRef.show(LoadingModalComponent,{initialState, keyboard: false, backdrop: 'static' });
this.myService.searchClient(data).subscribe(
  res => {
    loadingModalRef.hide()
  }
);

【讨论】:

  • 带有箭头函数的“this”上下文不等于“window”
  • @Marco24690 你是对的,很抱歉误导你我会更正我的答案
  • 您编写的代码应该可以按我的预期工作,但不幸的是它没有。如果我尝试在没有超时的情况下关闭模式,它不会隐藏。
  • @Marco24690 再次更正。我没有意识到service.show() 没有返回引用服务(为什么会这样)。我们现在只是将this.service 保存到modalRef,这样就可以了。
猜你喜欢
  • 2016-12-14
  • 1970-01-01
  • 2016-04-25
  • 2022-01-15
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 2021-02-25
相关资源
最近更新 更多