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

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

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

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

Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

586閲覧

Vue: 絞り込み機能の実装に関しての質問です。

ShojiroAbe

総合スコア31

Vue.js

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

Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/09/17 07:47

前提

Vue、Vuetifyを使用しての「絞り込み機能」の実装をしています。
その最中で、配列要素内の描画と格納及び削除でつまづきましたので
ご質問させてください。

実現したいこと

1-- まず最初に開いた際に、dataの初期値であるchecks: [ ]が空であるのに対し
v-for="(item, i) in searchLineUp"
が、なぜ描画(※)されてしまっているのか(※products内の要素が)

2-- 各「v-checkbox」にチェックを入れるとチェックした商品が下に並びますが
チェックが二つ、三つになると描画され無くなってしまいます。

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

エラーメッセージは現在特に発生していません。

該当のソースコード

HTML

1<template> 2 <div class="kensaku main"> 3 <h1>絞り込み検索 モジュール</h1> 4 <div> 5 <div class="checkbox"> 6 <v-checkbox 7 v-for="categoly in categories" :key="categoly.type" 8 v-model="categoly.checkbox" 9 :label="categoly.type" 10 @click="checkClick(categoly.type)" 11 ></v-checkbox> 12 </div> 13 <ul> 14 <li v-for="(item, i) in searchLineUp" :key="i"> 15 <v-card 16 class="mx-auto my-12" 17 max-width="374" 18 > 19 <v-img 20 height="250" 21 v-bind:src="item.img" 22 ></v-img> 23 24 <v-card-text> 25 <div>{{ item.categoly }}</div> 26 <p class="card-title text--primary"> 27 {{ item.title }} 28 </p> 29 <div class="my-4 text-subtitle-1"> 30 ¥ {{ item.price }} 31 </div> 32 </v-card-text> 33 </v-card> 34 </li> 35 </ul> 36 </div> 37 </div> 38</template>

JavaScript

1<script> 2 export default { 3 data: () => ({ 4 checks: [], 5 categories: [ 6 {type: '靴', checkbox: false,}, 7 {type: 'シャツ', checkbox: false,}, 8 {type: '帽子', checkbox: false,}, 9 ], 10 products: [ 11 // 靴 12 {title: '靴01', categoly: '靴', price: '1,000', img: require('@/assets/img/shose/01.png')}, 13 {title: '靴02', categoly: '靴', price: '2,000', img: require('@/assets/img/shose/02.png')}, 14 {title: '靴03', categoly: '靴', price: '3,000', img: require('@/assets/img/shose/03.png')}, 15 // シャツ 16 {title: 'シャツ01', categoly: 'シャツ', price: '1,000', img: require('@/assets/img/shirt/01.png')}, 17 {title: 'シャツ02', categoly: 'シャツ', price: '2,000', img: require('@/assets/img/shirt/02.png')}, 18 {title: 'シャツ03', categoly: 'シャツ', price: '3,000', img: require('@/assets/img/shirt/03.png')}, 19 // 帽子 20 {title: '帽子01', categoly: '帽子', price: '1,000', img: require('@/assets/img/hat/01.png')}, 21 {title: '帽子02', categoly: '帽子', price: '2,000', img: require('@/assets/img/hat/02.png')}, 22 {title: '帽子03', categoly: '帽子', price: '3,000', img: require('@/assets/img/hat/03.png')}, 23 ], 24 }), 25 computed: { 26 searchLineUp() { 27 return this.products.filter(item => { 28 return item.categoly.includes(this.checks) 29 }) 30 } 31 }, 32 methods: { 33 checkClick(type) { 34 const index = this.checks.indexOf(type); 35 const match = this.checks[index]; 36 if(type === match){ 37 console.log('sucess'); 38 let remove = [type] 39 this.checks = this.checks.filter(list => { 40 return ! remove.includes(list) 41 }) 42 console.log(this.checks); 43 console.log(this.searchLineUp); 44 } else if(index == -1) { 45 console.log('error'); 46 this.checks.push(type) 47 console.log(this.checks); 48 console.log(this.searchLineUp); 49 } 50 }, 51 }, 52 } 53</script> 54

恐らく、computed内が怪しいのはなんとなく感じますが、
Vueに関しては、本当に初学者のため完全に煮詰まってしまいここに辿り着きました…
大変恐れ入りますが、どなたかご教授お願いいたします。

補足情報(FW/ツールのバージョンなど)

"vue": "^2.6.14", "vuetify": "^2.6.0"

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

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

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

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

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

guest

回答1

0

ベストアンサー

includes のところが逆になっているのではないでしょうか。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/includes

js

1 computed: { 2 searchLineUp() { 3 return this.products.filter(item => { 4 return this.checks.includes(item.categoly) // 修正 5 }) 6 } 7 },

投稿2022/09/17 13:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ShojiroAbe

2022/09/19 12:00

返信が遅れてしまいすみません! おかげさまで解決いたしました! 添付していただきましたドキュメントも読みましたが、引数に受け取る対象が間違っていました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問