PrimeVue确认对话框打开多次

nue99wik  于 2022-12-19  发布在  Vue.js
关注(0)|答案(1)|浏览(372)

我有一个来自PrimeVue的<ConfirmDialog>组件,它可以正常工作,除了它在激活时会多次打开;作为参考,我在整个过程中多次使用该组件,有些ConfirmDialogs只打开一次,大多数通常打开两次。2当接受或拒绝对话框时,它们都会立即关闭,但是,当按对话框右上角的“X”时,它一次只关闭一个示例,显示多个对话框已经打开。
我尝试过的:使用密钥

<ConfirmDialog key="myDialog" />

...

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

谢谢你的帮助。

kupeojn6

kupeojn61#

我遇到了这个问题,我发现这是由于在DOM标记中声明了多个ConfirmDialog组件造成的。例如,如果您为每个使用它的组件添加一个确认对话框,然后您碰巧同时在页面上加载了2个以上的组件,您将看到该页面上存在的每个<ConfirmDialog />对应一个对话框。
解决方案是在根Vue组件中只声明一次ConfirmDialog,然后在每次调用它时,只导入useConfirm函数,然后使用该函数调用对话框。
例如:
App.vue

<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>

相关问题