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

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

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

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

4222閲覧

Vue.jsを利用したバリデーション時 エラーなしの場合に画面遷移したい

kaori_luna

総合スコア14

Vue.js

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2019/05/28 15:49

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
Laravel + Vue.jsを利用してお問い合わせページを作成しています。

サブミットボタンクリック時にVue.jsがLaravelのバリデーションAPIを呼び出しして、
エラーがない場合は、次の画面に遷移させたいです。

しかし、Vue.jsにて次の画面に遷移させる記述を行う必要があると思うのですが、記述方法が上手くいかず困っています。

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

エラーメッセージ

該当のソースコード

Vue.js

1methods: { 2 doSubmit: function (e) { 3 let item = {}; 4 Object.entries(this.$data).map(function (data) { 5 item[data[0]] = data[1]; 6 }); 7 let param = {data: item}; 8 let count_data = this.checkData(); 9 let that = this; 10 axios({ 11 method: "post", 12 url: "api/allvalidate/check", 13 data: param 14 }) 15 .then(function (res) { 16 }) 17 .catch(function (e) { 18 that.$set(that, 'errors', e.response.data.errors); 19 }) 20 e.preventDefault(); 21 }, 22}

VIEW(Laravel)

1{{ form_open({'id':'inputForm','method':'POST','url':'/confirm'}) }} 2 <section class="Content"> 3 <div class="Form" id="app"> 4 5 <label for="f-submit"> 6 <button id="f-submit" class="btn btn--cta" name="f-submit" @click="doSubmit" type="submit">送信</button> 7 </label> 8 9 </div> 10 </section> 11 {{ form_close() }}

試したこと

axiosの.thenに「return true」を記載しましたが、遷移してくれません。

Vue.js

1methods: { 2 doSubmit: function (e) { 3 let item = {}; 4 Object.entries(this.$data).map(function (data) { 5 item[data[0]] = data[1]; 6 }); 7 let param = {data: item}; 8 let count_data = this.checkData(); 9 let that = this; 10 axios({ 11 method: "post", 12 url: "api/allvalidate/check", 13 data: param 14 }) 15 .then(function (res) { 16 return true; 17 }) 18 .catch(function (e) { 19 that.$set(that, 'errors', e.response.data.errors); 20 }) 21 e.preventDefault(); 22 }, 23}

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

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

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

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

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

guest

回答1

0

ベストアンサー

問題点が2点ありまして、

1点目は、開発者ツールを使うなどしてボタンを押さずにフォームを送信するとチェックをすり抜けることができてしまうところ。
ボタンクリックではなく<form>タグのsubmitイベントを起点にdoSubmitメソッドを実行する必要があります。

blade

1{{ form_open({'id':'inputForm','method':'POST','url':'/confirm','@submit':'doSubmit'}) }} 2 <section class="Content"> 3 <div class="Form" id="app"> 4 5 <label for="f-submit"> 6 <button id="f-submit" class="btn btn--cta" name="f-submit" type="submit">送信</button> 7 </label> 8 9 </div> 10 </section> 11{{ form_close() }}

2点目は、成功時にフォームを送信する処理が存在しないところ。
チェックが同期処理のみならpreventDefault()を実行するか否かでフォームの送信・非送信を切り替えられるのですが、非同期処理が入ってくるとpreventDefault()を必ず実行しなければならず、フォームを送信する処理を自分で書く必要があります。

js

1axios({ 2 method: "post", 3 url: "api/allvalidate/check", 4 data: param 5}) 6 .then(function (res) { 7 // フォーム送信 8 e.currentTarget.submit(); 9 }) 10 .catch(function (e) { 11 that.$set(that, 'errors', e.response.data.errors); 12 }) 13e.preventDefault();

投稿2019/05/28 18:30

yhg

総合スコア2161

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

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

kaori_luna

2019/05/29 01:47

ありがとうございます。 ボタンクリックではなく<form>タグのsubmitイベントを起点にdoSubmitメソッドをいれると、submitをクリックする時、いつも次の画面に遷移されます。 ``` {{ form_open({'id':'inputForm','method':'POST','url':'/private/confirm', '@submit':'doSubmit'}) }} ``` これも試しましたが、効果がありません。 ``` <form @submit.prevent="doSubmit"> ```
yhg

2019/05/29 04:02

フォーム送信処理を消しても遷移しますか? 遷移しないならAPIのレスポンスコードの問題になります。
kaori_luna

2019/05/29 04:55 編集

ありがとうございます。フォーム送信処理を消して遷移しないようにできました。2点目は、成功時にフォームを送信する処理を入れましたけど、 ``` e.currentTarget.submit(); ``` 遷移できません。
kaori_luna

2019/05/29 09:08 編集

ご回答ありがとうございます。 これを書くと解決できました。 ``` that.$refs.form.submit(); ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問