首页  >  问答  >  正文

标题重写为:PrimeVue ConfirmDialog Multiple Instances Issue

我有一个来自 PrimeVue 的 组件,它可以正常工作,除了它在激活时会打开多次;作为参考,我在整个过程中多次执行该组件,有些确认对话框只打开一次,大多数通常打开两次。当接受或拒绝对话框时,它们都会立即关闭,但是,当按对话框右上角的“X”时,它一次仅关闭一个实例,显示多个对话框已打开。

我尝试过的: 使用密钥

<ConfirmDialog key="myDialog" />

...

const confirmer = (
 message,
 header,
 icon,
 ) => {
confirm.require({
 accept: () => { confirm.close()},
 reject: () => { confirm.close()},
 key: 'myDialog'
})}

感谢您的帮助。

P粉328911308P粉328911308287 天前404

全部回复(1)我来回复

  • P粉021708275

    P粉0217082752024-01-06 09:26:16

    我遇到了这个问题,我发现它是由在 DOM 标记中声明多个 ConfirmDialog 组件引起的。例如,如果您向使用它的每个组件添加一个确认对话框,然后您碰巧同时在页面上加载 2 个以上组件,则您将看到每个 都有 1 个对话框存在于该页面上。

    解决方案是仅在根 Vue 组件中声明一次ConfirmDialog,然后每次调用它时,仅导入 useConfirm 函数,然后使用该函数调用对话框。

    例如:

    应用程序视图

    <script setup>
    import ConfirmDialog from 'primevue/confirmdialog';
    </script>
    
    <template>
        <router-view></router-view>
    
        <ConfirmDialog />
    </template>

    所有其他组件:

    <script setup>
    import { useConfirm } from 'primevue/useconfirm';
    
    const confirm = useConfirm();
    
    const handleRemoveThing = () => {
        // bye
    };
    
    const onRemoveThing = () => {
        confirm.require({
            message: 'Are you sure you want to remove some thing?',
            header: 'Remove Thing',
            icon: 'icon-delete',
            rejectLabel: 'Cancel',
            acceptLabel: 'Remove',
            acceptClass: 'p-button-danger',
            accept: handleRemoveThing,
        });
    };
    </script>
    
    <template>
        <div>
            <button @click="onRemoveThing">Remove</button>
        </div>
    </template>

    回复
    0
  • 取消回复