Ionic 显示相对于元素的离子弹出框而不单击

2nc8po8w  于 2023-05-27  发布在  Ionic
关注(0)|答案(3)|浏览(213)

我需要在页面上显示工具提示,相对于某些元素,而无需用户单击以显示它们-即。自动显示它们。ion-popover似乎是最好的方法,但是,根据documentation
为了相对于被点击的元素定位弹出框,需要将点击事件传递到当前方法的选项中。如果事件未通过,弹出框将位于视口的中心。
我不确定Ionic是否提供了一个没有点击事件的相对定位弹出框的场景(文档没有提到它)。我也不想触发一个点击事件,因为一些元素有routerLink s,触发点击事件会导航离开当前页面。使用CSS将弹出框从页面的默认中心移动,对我来说似乎是一个肮脏的解决方案

camsedfj

camsedfj1#

如果Ionic将“none”实现为triggerAction属性的值,这将是很好的,表明当触发器元素被单击(或悬停或其他任何操作)时,弹出框不应该打开。
我的解决方案是将一个空div放在我希望弹出框出现的元素中,并将该空div设置为触发器元素(而不是实际的按钮或其他)。将此div留空,使其大小为0px × 0px,因此永远不会被单击。

jdg4fx2g

jdg4fx2g2#

这对你合适吗?

import { IonButton, IonPopover,  } from '@ionic/react';
    
    export const Sample: React.FC = () => {
           const [popoverState, setShowPopover] = useState(false);
          
        return (
           <>
             <IonButton onMouseOver={()=>setShowPopover(true)}> click me</IonButton>
            <IonPopover
            cssClass='my-custom-class'
            isOpen={popoverState}
            onDidDismiss={() => setShowPopover(false)}>
            <p>This is popover content</p>
          </IonPopover>
         </>      
        );
    };
    export default Sample;
aelbi1ox

aelbi1ox3#

得到了同样的请求,我想在我的Ionic页面上的按钮元素上方添加弹出框,以解释按钮在第一次打开应用程序时的作用。
因此,在我的button元素中,我创建了一个空的div,它有一个id和一个click事件,如下所示:

<button>
  <div #btnPlusTutorial (click)="showPopover($event, 'Popover text goes here')"></div>
</button>

然后我使用viewChild来获取我首先在文档顶部导入的元素ref:

import { Component, ElementRef, ViewChild} from '@angular/core';

在构造函数之前,我将元素放入变量btnPlusTutorial中

@ViewChild('btnPlusTutorial') btnPlusTutorial: ElementRef<HTMLElement>;

在函数内部,我以编程方式单击元素

ionViewDidEnter() {
    this.btnPlusTutorial.nativeElement.click()
  }

因此,它使用还必须导入的popoverController调用函数showPopover()

async showPopover(e: Event, content: string) {
      const popover = await this.popoverController.create({
        component: PopoverComponent,
        componentProps: { content },
        event: e,
        side: "top"
      });
      
      await popover.present()
  }

相关问题