前提・実現したいこと
Vue.jsで、外部APIからカクテルのデータを所得し、検索するページを作っていますが、
4項目全てを入力しなければ結果が表記されない状態です。
1項目でも入力されれば、それぞれの項目に合った結果を表記したいのですが、
filter関数の使い方が今ひとつ分かりません。
どのように表記すればいいでしょうか?
勉強不足で申し訳ありませんが、回答よろしくお願いいたします。
該当のソースコード
html
1<template> 2 <div> 3 <div> 4 <div>ベース 5 <select v-model="base_change"> 6 <option disabled value=""></option> 7 <option value="ノンアルコール">ノンアルコール</option> 8 <option value="ジン">ジン</option> 9 <option value="ウォッカ">ウォッカ</option> 10 <option value="テキーラ">テキーラ</option> 11 <option value="ラム">ラム</option> 12 <option value="ウイスキー">ウイスキー</option> 13 <option value="ブランデー">ブランデー</option> 14 <option value="リキュール">リキュール</option> 15 <option value="ワイン">ワイン</option> 16 <option value="ビール">ビール</option> 17 <option value="日本酒">日本酒</option> 18 </select> 19 </div> 20 <div>味わい 21 <select v-model="taste_change"> 22 <option disabled value=""></option> 23 <option value="甘口">甘口</option> 24 <option value="中甘口">中甘口</option> 25 <option value="中口">中口</option> 26 <option value="中辛口">中辛口</option> 27 <option value="辛口">辛口</option> 28 </select> 29 </div> 30 <div>スタイル 31 <select v-model="style_change"> 32 <option disabled value="" ></option> 33 <option value="ショート">ショート</option> 34 <option value="ロング">ロング</option> 35 </select> 36 </div> 37 <div>技法 38 <select v-model="technique_change"> 39 <option disabled value=""></option> 40 <option value="ビルド">ビルド</option> 41 <option value="ステア">ステア</option> 42 <option value="シェイク">シェイク</option> 43 <option value="ブレンド">ブレンド</option> 44 </select> 45 </div> 46 </div> 47 <button v-on:click="show">注文</button> 48 <modal name="modal-test" :draggable="false" :resizable="false" :scrollable="true" width="85%" height="auto"> 49 <div v-for="(cocktail,key) in cocktailSelect" :key="key"> 50 <small>{{cocktail.cocktail_digest}}</small><br> 51 <u>{{cocktail.cocktail_name}}</u> 52 <div> 53 <div>{{cocktail.base_name}}</div> 54 <div>Taste</div><div>{{cocktail.taste_name}}</div> 55 </div> 56 <div> 57 <div>Style</div><div>{{cocktail.style_name}}</div> 58 <div>Alc.</div><div>{{cocktail.alcohol}}%</div> 59 </div> 60 <h1>{{cocktail.cocktail_desc}}</h1> 61 </div> 62 </modal> 63 </div> 64</template>
Javascript
1<script> 2import axios from 'axios' 3export default{ 4 data() { 5 return{ 6 base_change:'', 7 taste_change:'', 8 style_change:'', 9 technique_change:'', 10 cocktails: [], 11 } 12 }, 13 computed: { 14 cocktailSelect: function() { 15 return this.cocktails.filter( 16 cocktails => cocktails.base_name === this.base_change 17 && cocktails.taste_name === this.taste_change 18 && cocktails.style_name === this.style_change 19 && cocktails.technique_name === this.technique_change 20 ); 21 } 22 }, 23 methods: { 24 show : function() { 25 this.$modal.show('modal-test'); 26 }, 27 hide : function () { 28 this.$modal.hide('modal-test'); 29 }, 30 }, 31 created() { 32 axios.get( 33 "/api/v1/cocktails?limit=100" 34 ) 35 .then(response => { 36 console.log(response); 37 this.cocktails = response.data.cocktails; 38 }) 39 }, 40 } 41</script> 42
補足情報(FW/ツールのバージョンなど)
vue-js-modalを実装して、結果がそちらに表記されるようにしています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。