LoginSignup
23
13

More than 3 years have passed since last update.

Vue.jsのinput or Vuetifyのtext-fieldで数値を入力したのにv-modelのバインド先では文字列になってる問題

Last updated at Posted at 2020-04-06

結論

  • v-model.number="numberData"で解決
  • Vuetifyは関係無い
  • type="number"しても数値にはならない
  • Vue.jsの修飾子に解決策がある

解決: Numberに自動変換する修飾子.number

ご覧の通りVuetifyは関係ありません。

下記のリンクで確認ください
Vue.js/フォーム入力バインディング/修飾子/Number

<template>
  <!-- 色々と省略 -->
  <!-- vue.jsならこう -->
  <div>
    <input v-model.number="numberData"/>
  <div>
  <!-- Vuetifyのtext fieldならこう -->
  <div>
    <v-text-field v-model.number="numberData"/>
  <div>
</template>

余談: 数字 + 文字列を入力してみた

まずは数字だけ入力

ちゃんとNumberになってていいですね!
スクリーンショット 2020-04-06 16.27.17.png
スクリーンショット 2020-04-06 16.27.30.png

文字列を含んで入力

ちょっと嫌がらせで色んな文字列を入力してみました。
うまく数字だけバインドされているみたいです!素晴らしい!!
スクリーンショット 2020-04-06 16.28.58.png
スクリーンショット 2020-04-06 16.29.13.png

その他のテスト

間に文字列

"100 hoge 100" → Number 100
のように微妙な位置に数字を入れてもバインドされた値は変わりませんでした。

↑の先頭100を200に書き換え

"100 hoge 100"を"200 hoge 100"にしようとした所
バインドの結果がNumber 2 に一度切り替わって無事200と入力することができました。

ソースを追いかけてはいませんが、おそらく数字に変換できるものが入力された時だけバインドしているのだと思います。

余談: 空白を取り除く修飾子.trim

https://jp.vuejs.org/v2/guide/forms.html#trim
Vue.jsには入力から自動的に空白を取り除くトリミング機能まであるとは!
最近の開発はVue.js様様ですね!!

<template>
  <!-- 色々と省略 -->
  <div>
    <input v-model.trim="text"/>
  <div>
</template>
23
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
13