質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

4404閲覧

v-dialogを閉じるメソッドを作成したい

bokupiroki

総合スコア54

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/02/04 10:20

編集2022/02/05 02:44

前提・実現したいこと

Vue.jsでアプリを作成中
UIフレームワーク「Vuetify」を利用中

登録ボタンを押すと同時に、ダイアログ(v-dialog)が閉じるメソッドを作成したい。

発生している問題・エラーメッセージ

エラーメッセージ
app.js:38414 TypeError: Cannot set properties of undefined (setting 'value')

閉じれません。

該当のソースコード

js

1<template> 2 <div> 3 <v-row justify="start"> 4 <v-col cols="auto"> 5 <v-dialog max-width="90%" scrollable> 6 <template v-slot:default="dialog"> 7 <v-card class="dialogBg"> 8 <v-toolbar color="primary" dark dense>記録入力 9 <v-spacer></v-spacer> 10 <v-btn icon @click="dialog.value = false"> 11 <v-icon>mdi-window-close</v-icon> 12 </v-btn> 13 </v-toolbar> 14 <v-card-text> 15 <RecordForm ref="RecordForm"></RecordForm> 16 </v-card-text> 17 <v-card-actions class="end"> 18 <v-btn text @click="submit" color="primary">登録</v-btn> 19 <v-btn text @click="dialog.value = false" color="primary">閉じる</v-btn> 20 </v-card-actions> 21 </v-card> 22 </template> 23 </v-dialog> 24 </v-col> 25</template> 26<script> 27 import RecordForm from '../layout/RecordForm' 28 29 export default { 30 components: { 31 RecordForm, 32 }, 33 methods: { 34 closeDialog(){ 35 this.dialog.value=false 36 }, 37 38 submit() {//登録ボタンが押されたときに発動するメソッド 39 this.$refs.RecordForm.post()//別ファイルのメソッドを呼び出し 40 this.closeDialog()//ダイアログを閉じるメソッドを呼び出し 41 }, 42 } 43</script>

試したこと

閉じるボタンからは閉じれます。

js

1<v-btn text @click="dialog.value = false" color="primary">閉じる</v-btn>

そのため、
dialog.valueの値をfalseにできれば閉じれると思っていました。

エラー内容からするに、dialogにvalueなんてプロパティはない!
といわれているようなので、

js

1data() { 2 return { 3 dialog:{value:null}, 4 }

と空のオブジェクトを定義してみたりもしましたが、エラーが出なくなるだけでダイアログは閉じませんでした。

他には、
閉じるボタンの@clickを編集して

js

1<v-btn text @click="closeDialog" color="primary">閉じる</v-btn> 2

としてみた場合も、エラーが出てNG。
どうやらメソッド化した時点でうまく動作しなくなってしまうようです。

dialog.valueという変数(プロパティ?)がVuetify側に握られていてどうにもならなさそうな感じもしています。

何かいい方法はないでしょうか。

たとえば、キーボードのESCキーを押したときにもダイアログは閉じます。
「ESCキーが押下されたことにする」のようなVue.jsの書き方があれば、それでも結構です。

補足情報(FW/ツールのバージョンなど)

Vue2
vuetify@2.6.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

バージョン回答ありがとうございます。
v-modelの指定がないためですかね。以下だとどうでしょうか?

js

1 <v-dialog v-model="dialog">

投稿2022/02/04 14:19

編集2022/02/05 12:32
tori72

総合スコア125

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bokupiroki

2022/02/05 02:46

ありがとうございます。ダメでした。エラーは出ませんが何も起こりません。 vuetifyは2.6.1です。 質問欄にも追記させていただきました。
bokupiroki

2022/02/06 08:23

解決しました!ありがとうございます。 html部分 <v-dialog max-width="90%" scrollable v-model="dialog"> js部分 closeDialog(){ this.dialog = false }, submit() { this.$refs.RecordForm.post() this.closeDialog() },
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問