18
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Vue.js] input要素の入力値を数値変換したいときは number修飾子を使う

Last updated at Posted at 2018-12-04

##本記事の目的
vueを書いていてどハマりしたので、覚え書き。
初心者向けです。筆者も初心者です。

##どハマり
説明用に簡略化。
input要素にtype="number"を指定して、
入力された数値が0ならアラートを出すよう実装するとします。

<template>
  <div class="root">
    <input type="number" v-model="num">
  </div>
</template>
<script>
  data: function() {
    return {
      num: null
    }
  },
  watch: {
    num: function(newNum) {
      if (newNum === 0) {
        alert("0が入力されています")
      }
    }
  }
</script>

これでうまく行くと思ったのですが、0を入力してみるとアラートがでません。

色々デバッグしてみると、入力値が文字列になっていることがわかりました。
HTML5でinput要素にtype="number"を指定したとしても、入力値を取得すると文字列が返ってくるんですね・・・。
newNum === 0 と厳密等価演算子を使用していたので、
"0" === 0 => falseとなり、アラートがでなかったんですね。

(ここで newNum == 0 なら自動で型変換されてtrueになるのですが、
暗黙の型変換はちょっと怖いので、===でいきたい)

##解決
公式ドキュメントを見ると、ちゃんとのってました!
参照URL:
https://jp.vuejs.org/v2/guide/forms.html#%E4%BF%AE%E9%A3%BE%E5%AD%90

input要素の入力値を数値にするには、通常のJSならparseIntなんかを使うとおもうのですが、
vueにおいてはv-model.numberとするといいらしいです。

 <input type="number" v-model.number="num">

便利ですね!

※number修飾子はあくまで入力値を数値変換するだけなので、フォームでバリデーションをかける
type="number"も残さねばなりません。

以上です。

18
8
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
18
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?