<template> <div> <input type="text" v-model="keyword" placeholder="关键字"> <select v-model="category"> <option value="">所有分类</option> <option v-for="cat in categories" :value="cat">{{ cat }}</option> </select> <button @click="search">查询</button> <ul> <li v-for="item in filteredItems" :key="item.id"> {{ item.name }} - {{ item.category }} </li> </ul> </div> </template> <script> import { ref, computed } from 'vue'; export default { setup() { const keyword = ref(''); const category = ref(''); const items = ref([ { id: 1, name: '物品1', category: '分类1' }, { id: 2, name: '物品2', category: '分类2' }, { id: 3, name: '物品3', category: '分类1' }, { id: 4, name: '物品4', category: '分类3' } ]); const categories = ['分类1', '分类2', '分类3']; const filteredItems = computed(() => { return items.value.filter(item => { const isMatchingKeyword = item.name.toLowerCase().includes(keyword.value.toLowerCase()); const isMatchingCategory = !category.value || item.category === category.value; return isMatchingKeyword && isMatchingCategory; }); }); const search = () => { // 执行搜索逻辑(例如调用接口) // 根据输入框和条件筛选出匹配的项 // 更新 filteredItems }; return { keyword, category, categories, filteredItems, search }; } }; </script>
在上述例子中,我们使用了Vue 3的ref
和computed
函数。首先,我们创建了名为keyword
、category
和items
的响应式引用。然后,我们使用computed
函数创建了一个计算属性filteredItems
,该属性根据输入框的关键字和选择的分类筛选出匹配的项。