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

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

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

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

Laravel

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

Q&A

解決済

1回答

1720閲覧

vue.jsで取得できる値をlaravelのフォームで送信することは可能なのか?(axiosを使わない)

tenlife

総合スコア70

Vue.js

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

Laravel

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

0グッド

0クリップ

投稿2020/08/20 22:55

編集2020/08/20 22:58

投稿機能の多層カテゴリー機能を実装しています。

カテゴリーの部分はvue.jsで作っています。

解決したいこと: vueのコンポーネントで取得したselectgrandchildをlaravel側のformで送信する事は可能なのでしょうか?

現状: これまでのやり方だとbladeの方をvueのように書き換えてaxiosで送信していくようにするイメージです。$emitとか使って子から親に渡せば良いとは思っています。
ですが今回はform部分はそのままでコンポネントからselectgrandchildを直接laravelのformと一緒に送る方法はないのだろうか?という状況にいます。

blade

1 <form action="{{route('item_create')}}" enctype="multipart/form-data" method="POST"> 2 @csrf 3 <div class="form-group mb-4"> 4 <label for="item_name">商品名</label> 5 <input type="text" name="name" class="form-control" id="item_name" placeholder="蒲焼き"> 6 </div> 7 <category></category> 8 <button type="submit" class="btn btn-primary text-white">出品する</button> 9 </form>

vue

1<template> 2 <div> 3 <div> 4 <label for="parent">カテゴリー</label> 5 <select class="custom-select custom-select-sm" id="parent" v-model="select" @change="categorychild"> 6 <option disabled value="">選択してください</option> 7 <option :value="life.id" v-for="life in lifes" :key="life.id"> 8 {{life.name}} 9 </option> 10 </select> 11 <div v-if="children.length !== 0"> 12 <select class="custom-select custom-select-sm" id="child" v-model="selectchild" @change="categorygrandchild"> 13 <option disabled value="">選択してください</option> 14 <option :value="child.id" v-for="child in children" :key="child.id"> 15 {{child.name}} 16 </option> 17 </select> 18 </div> 19 <div v-if="grandchildren.length !== 0"> 20 <select class="custom-select custom-select-sm" id="child" v-model="selectgrandchild" @change="sendnew"> 21 <option disabled value="">選択してください</option> 22 <option :value="grandchild.id" v-for="grandchild in grandchildren" :key="grandchild.id"> 23 {{grandchild.name}} 24 </option> 25 </select> 26 </div> 27 </div> 28 </div> 29</template> 30 31<script> 32export default { 33 data() { 34 return { 35 select: '', 36 selectchild: '', 37 selectgrandchild: '', 38 children: [], 39 grandchildren: [], 40 lifes: [ 41 {id: 1, name: '運動'}, 42 {id: 2, name: '食べ物'}, 43 {id: 3, name: '学び'}, 44 ], 45 childsbeta: [ 46 {id: 4, parent_id: 1, name: '海のスポーツ'}, 47 {id: 5, parent_id: 1, name: '冬のスポーツ'}, 48 {id: 6, parent_id: 1, name: '夏のスポーツ'}, 49 {id: 7, parent_id: 2, name: '和食'}, 50 {id: 8, parent_id: 2, name: '洋食'}, 51 {id: 9, parent_id: 2, name: 'インスタント'}, 52 {id: 10, parent_id: 3, name: '理数系'}, 53 {id: 11, parent_id: 3, name: '文系'}, 54 {id: 12, parent_id: 3, name: 'プログラミング'}, 55 ], 56 grandchildsbeta: [ 57 {id: 13, child_id: 4, name: 'サーフィン'}, 58 {id: 14, child_id: 4, name: 'サップ'}, 59 {id: 15, child_id: 4, name: 'ビーチバレー'}, 60 {id: 16, child_id: 5, name: 'スキー、スノボー'}, 61 {id: 17, child_id: 5, name: 'カーリング'}, 62 {id: 18, child_id: 5, name: 'スケート'}, 63 {id: 19, child_id: 6, name: '野球'}, 64 {id: 20, child_id: 6, name: 'サッカー'}, 65 {id: 21, child_id: 6, name: '陸上'}, 66 {id: 22, child_id: 7, name: '寿司'}, 67 {id: 23, child_id: 7, name: 'ラーメン'}, 68 {id: 24, child_id: 7, name: '鍋'}, 69 {id: 25, child_id: 8, name: 'ピザ'}, 70 {id: 26, child_id: 8, name: 'パスタ'}, 71 {id: 27, child_id: 8, name: 'ハンバーガー'}, 72 {id: 28, child_id: 9, name: 'マクドナルド'}, 73 {id: 29, child_id: 9, name: 'バーガーキング'}, 74 {id: 30, child_id: 9, name: '蒙古タンメン'}, 75 {id: 31, child_id: 10, name: '医学'}, 76 {id: 32, child_id: 10, name: '化学'}, 77 {id: 33, child_id: 10, name: '天文学'}, 78 {id: 34, child_id: 11, name: '古文'}, 79 {id: 35, child_id: 11, name: '歴史、地理'}, 80 {id: 36, child_id: 11, name: '心理学'}, 81 {id: 37, child_id: 12, name: 'go'}, 82 {id: 38, child_id: 12, name: 'html'}, 83 {id: 39, child_id: 12, name: 'javascript'}, 84 ], 85 } 86 }, 87 methods: { 88 categorychild() { 89 this.children = this.childsbeta.filter(value => value.parent_id === this.select) 90 }, 91 categorygrandchild() { 92 this.grandchildren = this.grandchildsbeta.filter(value => value.child_id === this.selectchild) 93 }, 94 sendnew() { 95 this.$emit('category-data', [this.selectgrandchild]); 96 } 97 } 98} 99</script>

vueで作ったコンポーネントからaxiosを使用しないでselectgrandchildを送るような実装は可能なのでしょうか?
お分かりになる方が居ましたら、ご教授いただきたいです。

不可能な場合はaxiosを使って実装します。

まだまだ勉強中で知識が浅くこのような質問をするに至りました。(もしかすると見当違いな質問をしているかもしれないと思っています。)

よろしくお願いいたします。

laravel7.2
vue.js 2.6.2

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

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

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

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

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

maisumakun

2020/08/20 23:15

実際にaxiosで送信しているコードはどこでしょうか?
tenlife

2020/08/21 01:06

質問の内容が薄くてすいません。 現在はaxiosに関する記述は書いていません。 載せているコードが送信しているformになります。
guest

回答1

0

ベストアンサー

ですが今回はform部分はそのままでコンポネントからselectgrandchildを直接laravelのformと一緒に送る方法はないのだろうか?

Vueで生成される<input>などにnameを振れば、外側にあるフォームをブラウザで送信する際に、何で書いたフォーム要素なのかは関係なく、まとめて送信されます。

(的はずれな回答でしたら追記していただければと思います)

投稿2020/08/21 01:09

maisumakun

総合スコア145952

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

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

tenlife

2020/08/21 01:36

回答ありがとうございます! 一度教えていただいたやり方で進めてみます!
tenlife

2020/08/21 03:40

教えて頂いた方法で実装出来ました! vue側にinput要素を作り送信させる方法でコントローラーまで飛ばすことができました! 回答ありがとうございました! <div v-if="grandchildren.length !== 0"> <select class="custom-select custom-select-sm" id="child" v-model="selectgrandchild" @change="sendnew"> <option disabled value="">選択してください</option> <option :value="grandchild.id" v-for="grandchild in grandchildren" :key="grandchild.id"> {{grandchild.name}} </option> </select> <input type="hidden" name="category_id" :value="here.id"> <input type="hidden" name="category_name" :value="here.name"> </div>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問