首頁  >  問答  >  主體

標題重寫為: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 天前407

全部回覆(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
  • 取消回覆