一般社団法人 全国個人事業主支援協会

COLUMN コラム

  • 【Vue3】v-text-fieldで値変更時に関数を実行し、値を渡す方法

Vue2からVue3に書き換える上で、Vuetifyのv-text-fieldの実装で少し学びがあったので書き記しておきます。

環境

  • Vue:3.4.15
  • Nuxt.js:3.9.3
  • Vuetify:3.5.1

やりたいこと

v-text-fieldでやりたいことは以下です。

  1. 値が変更されたとき、関数を実行する。
  2. 引数に任意の値を渡す。
  3. 引数に変更された値を渡す。

v-text-fieldで値変更時に関数を実行するには、v-onディレクティブとして、update:model-valueに関数を指定してあげればOKです。

ここまでは公式ドキュメントですぐに分かります。

第1引数に変更後の値が渡されるので、「@update:model-value=”onChangeText”」のように関数に括弧をつけずに渡してあげれば、1,3だけであれば簡単に実装することができます。

 

しかし、1,2,3を同時に実現したい場合どうすりゃいいんだと。

こうするとできました。

<template v-for=”(item, idx) in items” :key=”`text-field-${idx}`”>
<v-text-field
v-model=”item.name”
:error-messages=”item.errMsg”
:label=”`${idx * 1 + 1}個目`”
@update:model-value=”onChangeText(idx, $event)”
@keyup.enter.exact=”clickSearchBtn”
/>
</template>

 

<script setup lang=”ts”>
interface Items {
name: string,
errMsg: string
}
const items = ref<Items[]>([
{ name: ”, errMsg: ” },
{ name: ”, errMsg: ” }
])
const onChangeText = (idx: number, val: string) => {
// idxを参照できる
// 変更後の値(val)を確認できる
}
</script>

なんで$eventで値受け取れるんや……。

v-on:clickでマウスイベント拾う時とかによく$eventは使いますが、ダメ元でやってみてうまくいったのが謎です。

 

まぁ、一旦いっか…。(別にこの実装使わないし。)

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア