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

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

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

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

Vuetify.js

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

Q&A

解決済

1回答

5344閲覧

Vuetify3でリリースされたv-data-tableのclick:rowイベントを動かしたい

hishima

総合スコア1

Vue.js

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

Vuetify.js

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

0グッド

1クリップ

投稿2023/02/17 03:35

実現したいこと

Vuetify3でリリースされたv-data-tableの#click:rowイベントを動かしたい

前提

初心者です。
vueでアプリを作成しており、Vuetify3の機能が充実してきたため、
vue2→vue3の移行を検討しています。
vuetifyのサンプルコードを元に、データの表示ができるところまでは実装できました。

vue2
vue2

vue3
vue3

該当行をクリックすると、データが取得できる処理を実現したく、
@click:row="showItem"の処理を追加しました。
vue2で動いていた処理をそのままvue3にも記載しましたが、vue3では動かなくなりました。
(下記、console.logで確認)

https://v2.vuetifyjs.com/ja/api/v-data-table/#events-click:row
https://vuetifyjs.com/en/api/v-data-table/#events-click:row

v-data-tableは現在開発中のため、該当の処理が現在動かない状態になっているのか
それとも書き方が変わっており、修正が必要なのかわかりませんでした。
ご存知の方いらっしゃいましたらご教授いただきたく、どうかよろしくお願いいたします。

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

console.log

1<vue2> 2calories: 159 3carbs: 24 4fat: 6 5iron: 1 6name: "Frozen Yogurt" 7protein: 4 8 9<vue3> 10PointerEvent {isTrusted: true, _vts: 1676603959301, pointerId: 1, width: 1, height: 1, …}

該当のソースコード

vue2

1<template> 2 <v-data-table 3 :headers="headers" 4 :items="desserts" 5 item-key="name" 6 class="elevation-1" 7 @click:row="showItem" 8 ></v-data-table> 9</template> 10 11<script> 12 export default { 13 data: () => ({ 14 headers: [ 15 { 16 text: 'Dessert (100g serving)', 17 align: 'start', 18 sortable: false, 19 value: 'name', 20 }, 21 { text: 'Calories', value: 'calories' }, 22 { text: 'Fat (g)', value: 'fat' }, 23 { text: 'Carbs (g)', value: 'carbs' }, 24 { text: 'Protein (g)', value: 'protein' }, 25 { text: 'Iron (%)', value: 'iron' }, 26 ], 27 desserts: [ 28 { 29 name: 'Frozen Yogurt', 30 calories: 159, 31 fat: 6.0, 32 carbs: 24, 33 protein: 4.0, 34 iron: 1, 35 }, 36 { 37 name: 'Ice cream sandwich', 38 calories: 237, 39 fat: 9.0, 40 carbs: 37, 41 protein: 4.3, 42 iron: 1, 43 } 44 ], 45 }), 46 methods: { 47 showItem(item){ 48 console.log(item) 49 } 50 } 51 } 52</script>

vue3

1<template> 2 <v-data-table 3 :headers="headers" 4 :items="desserts" 5 item-value="name" 6 class="elevation-1" 7 @click:row="showItem" 8 ></v-data-table> 9</template> 10 11<script> 12 export default { 13 data () { 14 return { 15 headers: [ 16 { 17 title: 'Dessert (100g serving)', 18 align: 'start', 19 sortable: false, 20 key: 'name', 21 }, 22 { title: 'Calories', align: 'end', key: 'calories' }, 23 { title: 'Fat (g)', align: 'end', key: 'fat' }, 24 { title: 'Carbs (g)', align: 'end', key: 'carbs' }, 25 { title: 'Protein (g)', align: 'end', key: 'protein' }, 26 { title: 'Iron (%)', align: 'end', key: 'iron' }, 27 ], 28 desserts: [ 29 { 30 name: 'Frozen Yogurt', 31 calories: 159, 32 fat: 6.0, 33 carbs: 24, 34 protein: 4.0, 35 iron: 1, 36 }, 37 { 38 name: 'Ice cream sandwich', 39 calories: 237, 40 fat: 9.0, 41 carbs: 37, 42 protein: 4.3, 43 iron: 1, 44 } 45 ], 46 } 47 }, 48 methods: { 49 showItem(item){ 50 console.log(item) 51 } 52 } 53 } 54</script>

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

vue2
"vue": "^2.6.14",
"vuetify": "^2.6.0",

vue3
"vue": "^3.2.47",
"vuetify": "^3.1.5",

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

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

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

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

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

guest

回答1

0

ベストアンサー

https://next.vuetifyjs.com/en/api/v-data-table/#events
vuetify3の機能はこちらのページに乗っています
左上にバージョンが出ているのでそこから3.x系に変えるとvuetify3のリファレンスを見ることができます。vuetify2とくらべてコンポーネントごとにすこし仕様が変わっているので把握しておくと良いです

自分もうまく把握していないのですが最初の引数はEventになっているようです
itemは2つ目の引数になっているので以下のような関数で取れることを確認しました
(2/18 18:56 columnsプロパティの記載を忘れていたため追加)

js

1showItem(event, values){ 2 console.log(values.item.columns) 3}

ちなみに説明の英語は「返り値の最初の値はアイテムデータ」ってあるのですが、戻り値を見ると明らかに1つ目はEvent、2つ目にObjectなのであっていない模様…(たぶんvuetify2のものをそのまま引用してる?)

itemはproxy型になっており、各列データはitem.columns.Calories等で取得できると思います
回答になっていたら幸いです

投稿2023/02/18 08:35

編集2023/02/18 09:57
rykss

総合スコア100

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

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

hishima

2023/02/18 11:34

ご丁寧に説明いただき、ありがとうございます。 2つ目の引数を指定することで取得できました! 英語の説明が2系の説明のままで、混乱しておりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問