Введите то, что вы хотите искать, независимо от имени, местоположения или винограда, если вы введете, например, shiraz
, отобразятся все элементы, которые включают шираз в name
, location
или grapes
let vue = new Vue({
el: '#app',
data() {
return {
search:'',
products: [
{
name: 'The Black Sock',
location: 'Australia',
grapes: ['shiraz']
},
{
name: 'Goat Roti',
location: 'France',
grapes: ['Shiraz' , 'Mourvedre']
},
{
name: 'Amon Ra',
location: 'New Zealand',
grapes: ['Chardonnay', 'Riesling']
}
]
}
},
methods: {
sortByName(a,b){
return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
}
},
computed: {
filteredProducts:function(){
let comperator = this.sortByName;
if(this.search == "") return this.products.sort(comperator);
let search = this.search.toLowerCase();
return this.products.filter(({name, location, grapes}) => name.toLowerCase().includes(search) || location.toLowerCase().includes(search) || grapes.find(el => el.toLowerCase().includes(search))).sort(comperator);
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<input type="text" v-model="search" placeholder="Search products">
<ul>
<li v-for="product in filteredProducts">
<h2>{{product.name}}</h2>
<p>{{product.location}}</p>
<p>{{product.grapes}}</p>
</li>
</ul>
</div>