Vuetify - v-dialog の v-model に vuex state を指定する方法 --- v-dialog を別のコンポーネントから制御する

updated: 2021/6/16

 

通常 v-dialog は v-model で 該当コンポーネントが保持する data の値を指定する。

それによって dialog の外側をクリックしたときに表示を toggle することができる。

ここで vuex の state を指定すると外側クリック時にコンソール上にエラーが出る。

(コンポーネントから直接 vuex state の値を変更できないため)

このエラー取りの方法に関して。

 

solution)

vuex action から v-model に指定した state の値を変更する。

<v-dialog v-model="this.$store.state.SOMETHING" persistent @click:outside="toggleDialog">

 

persistent >>> 外側クリック時の default のイベントを停止

@click:outside="toggleDialog" >>> v-model の値を変更する action をマニュアルで設定

 

vuex側 --- 詳細は割愛

'toggleDialog' (state) {

  state.SOMETHING = !state.SOMETHING

}

 

optional)

@otherComponent

<button @click="$store.dispatch('toggleDialog')"></button>

 

メリット:

v-model に vuex state を指定することで dialog の表示を別の component から操作できるようになる。

 

注意***

list rendering されたcomponentにdialogを設置し、さらにnest されたdialogを設置した場合、

f:id:monteecristoo:20210616203140p:plain

nest されたdialogは list1 のnest されたdialogを開いた処理をしたはずなのにlist2のnestされたdialogを開いたりなどエラーが発生するので素直にオフィシャル通りに

<template v-slot:activator="{on, attrs}">で対応する