前置き
今回はイベントハンドラ の一種、
@submitについて🌟
基本的な記法や
イベントの種類、
イベント修飾子などは
こちらで既に解説済みです🎀👩🏫
@submitの使用例を
主に解説していきます💡
@submit
イベントの種類
MDN
submitイベントは<form>が
送信された時に発生します📤
formタグ自身につくもので、
form内のinputやbuttonでは発生しません💡
consoleでエベントの種類を
確認してみましょう✅ 👀
JavaScriptイベントハンドラ
--| submitイベント/
----| @submit
SubmitEventの中の
typeがsumit(@submit)とありますね🌟
コード
.preventについては後述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<template> <div class="page"> <form @submit.prevent="submit"> <input type="text" placeholder="テキストを入力" > <button type="submit">送信</button> </form> </div> </template> <script> export default { methods: { submit () { console.log(event) }, }, } </script> |
使用例
こちらの記事が分かりやすいかと思います🌟
Step3: ログイン機能の実装
firebaseAuthを使用して、
emailとpasswordを
submitしています🎈🧸
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
<template> <div class="page"> <form class="form" @submit.prevent="login" > <label class="label"> <span class="label"> email </span> <input class="input" type="text" v-model="email" > </label> <label class="label"> <span class="label"> password </span> <input class="input" type="password" v-model="password" > </label> <button class="button" type="submit" > Login </button> </form> </div> </template> <script> import firebase from '~/plugins/firebase' export default { data() { return { email: '', password: '' } }, methods : { login() { firebase.auth().signInWithEmailAndPassword(this.email, this.password) .then(user => { console.log('成功!')// eslint-disable-line }).catch((error) => { alert(error) }); }, } } </script> |
.prevent修飾子
.preventとは
既定のアクションを通常どおりに行うべきではないことを伝えます。
https://developer.mozilla.org/ja/docs/Web/API/Event/preventDefault
JSのEvent.preventDefault()関数のこと
まずは簡単に@clickでやってみます🌟🧸
aタグのデフォルトの挙動
「クリックしたらページ遷移する」
ことを妨げています。
いくらクリックしても
localhost:3000に遷移しません。
コード
1 2 3 |
<template> <a href="/" @click.prevent>link</a> </template> |
.preventがある場合
ではformで.preventを使った場合💡
.preventを入れることで
form本来のaction属性で
「送信時に画面遷移する」
ことを防いでいます。
action属性とは
送信するデータ先を指定するもの
送信時にリロード, 画面遷移される
データ送信先のことをURIと言います
actionでの送信先は指定していません
データを'どこか'に送信した場合
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<template> <div class="page"> <form @submit.prevent="submit"> <input type="text" placeholder="テキストを入力" > </form> </div> </template> <script> export default { methods: { submit () { console.log('submit!') }, }, } </script> |
.preventがない場合
.preventがないと
リロードされて入力した文字列が
送信はできるものの、
画面上からは消えてしまいます。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<template> <div class="page"> <form @submit="submit"> <input type="text" placeholder="テキストを入力" > </form> </div> </template> <script> export default { methods: { submit () { console.log('submit!') }, }, } </script> |
まとめ
- @submitはformタグに使う
- .preventをつけることで画面遷移させない