投稿機能の多層カテゴリー機能を実装しています。
カテゴリーの部分は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
回答1件
あなたの回答
tips
プレビュー