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

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

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

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

Q&A

解決済

2回答

764閲覧

Vue.jsで検索する過程の途中でも、結果を表示したい

inaho

総合スコア1

Vue.js

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

0グッド

0クリップ

投稿2021/11/18 06:59

編集2021/11/18 07:07

前提・実現したいこと

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を実装して、結果がそちらに表記されるようにしています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

現状だとA&B&C&Dが条件になっているので、最低一つだけ操作して、検索を表示させるには、それぞれのプルダウンの値に対してメソッドか算出プロパティで紐付ければ大丈夫かと思います。

vue

1computed:{ 2 base_change:function(){ 3 //フィルタリングする 4 }, 5 taste_change:function(){ 6   //フィルタリングする 7 }, 8 style_change:function(){ 9  //フィルタリングする 10 }, 11 technique_change:function(){ 12  //フィルタリングする 13 }, 14},

あとは検索条件がorかandによってcooktailSelectの値の制御が変わってきます。andで絞り込んでいく場合は、算出プロパティにも一度算出済のcooktailSelectを代入して、それをフィルタリングしていきます。

投稿2021/11/19 06:56

FKM

総合スコア3640

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

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

0

4項目全てを入力しなければ結果が表記されない状態です

js

1 cocktailSelect: function() { 2 return this.cocktails.filter( 3 cocktails => cocktails.base_name === this.base_change 4 && cocktails.taste_name === this.taste_change 5 && cocktails.style_name === this.style_change 6 && cocktails.technique_name === this.technique_change 7 ); 8 }

画面を開き、base_changeだけ変更したとき、taste_changeの値はなんですか?
cocktails.taste_name に、その taste_change と一致するものは存在するのですか?

this.taste_change === '' の場合(初期値の場合)を考慮する必要があるのではないですか。

投稿2021/11/18 07:14

編集2021/11/18 07:20
shiketa

総合スコア3971

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問