之前寫過一篇在 《在 Composition API 中使用 props 與 emit 操控 modal》的筆記,那時是使用 props 跟 emit 處理外部元件與內部元件之間資料傳遞的問題。
但是當有兩個以上的 modal/彈跳視窗 的時候,第一個 modal 是開啟狀態,這時觸發第二個 modal 開啟,同時第一個 modal 要關閉。這種情形下,兩個內部元件彼此要傳遞訊息變得十分複雜,這次我試著用 pinia 來管理兩個 modal 的狀態,狀態就不再儲存在兩個 modal 元件內部。
任務說明
在 pinia 中有 isFirstOpen
跟 isSecondOpen
兩個變數,用來管理 2 個元件的開啟與關閉,預設都是 false
, 內部元件則用 v-if 控制元件的顯示與否,在 false
狀態,兩個元件皆為關閉,當有一個元件被開啟,則另外一個元件的狀態則會轉為 false(預設也是 false)。
假設第一個元件是開啟狀態,isFirstOpen
的狀態為 true
,第二個元件的狀態isSecondOpen
為 false
。這時去開啟第二個元件,isSecondOpen
轉為 true
,則isFirstOpen
轉為 false,第一個元件就會關閉,反之亦然。這樣就可以達到切換2個 modal 的目的。
檔案結構如下:
main.js 引入 pinia
pinia 中 modalControl.js 的設定
stores/modalControl.js
app.vue 中的設定
app.vue
2 個 modal 元件的設定
ModalView.vue
SecondModal.vue