从其组件中消除Ionic 4弹出窗口

时间:2019-03-05 18:23:05

标签: popover ionic4

我有一个标准的Ionic 4页面(主页),该页面创建一个使用组件(BusinessDetails)和一个按钮的弹出窗口,该按钮重定向到新页面(RequestTurn)。但是,当我单击该按钮时,弹出窗口不会消失,而是呈现在我的RequestTurn页面顶部。我想我需要从组件(BusinessDetails)中手动关闭它,但是我不知道如何从那里访问弹出窗口的实例,因为它是在主页中创建的。有办法吗?

home.page.ts

presentModal(business:Business, event: Event) {
this.popoverController.create(({
    component: BusinessDetailsComponent,
    cssClass: "business-popover",
    showBackdrop: true,
    componentProps: {
        business: business
    }
}) as any).then(popover => popover.present()); }

business-detail.component.ts

goToRequestTurn(id: string) {
   //Need to dismiss popver here (?)
   this.router.navigateByUrl(`/request-turn/${id}`); }

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

private popoverController: popoverController添加到弹出式构造函数

然后编写一个像这样的函数,并在您希望消除模态时调用它

 async DismissClick() {
await this.popoverController.dismiss();
  }

答案 1 :(得分:2)

我解决了以下问题: 在父组件中,我已将回调作为道具传递给子组件:

const popover = await this.popoverController.create({
  component: PopoverComponent,
  event: ev,
  componentProps: {
    onClick: () => {
      popover.dismiss();
    },
  },
});
await popover.present();

在PopoverComponent中,我添加了@Input() onClick;,当用户单击时会调用它:

...
@Input()
public onClick = () => {}
...
afterClick() {
  this.onClick();
}

答案 2 :(得分:0)

private popoverController: popoverController添加到弹出式构造函数

然后编写这样的函数,并在您想要关闭弹出菜单时调用它。此功能还可以保留导航逻辑。 先关闭弹出窗口然后再导航似乎可以提供更好的用户体验

 async DismissClick() {
    await this.popoverController.dismiss();
    this.router.navigate([`/request-turn/${id}`]);