当前位置:首页 > VUE

用vue实现条件检索

2026-02-21 21:14:19VUE

用 Vue 实现条件检索

数据绑定与输入框

在 Vue 中实现条件检索通常需要结合 v-model 实现输入框与数据的双向绑定。例如,创建一个搜索输入框:

<template>
  <input v-model="searchQuery" placeholder="输入检索条件" />
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: '苹果' },
        { id: 2, name: '香蕉' },
        { id: 3, name: '橙子' }
      ]
    };
  }
};
</script>

计算属性过滤数据

使用计算属性 (computed) 动态过滤数据,避免直接修改原始数据。根据 searchQuery 过滤 items

<script>
export default {
  computed: {
    filteredItems() {
      return this.items.filter(item =>
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      );
    }
  }
};
</script>

渲染过滤结果

在模板中渲染过滤后的数据,例如通过 v-for 显示列表:

用vue实现条件检索

<template>
  <input v-model="searchQuery" placeholder="输入检索条件" />
  <ul>
    <li v-for="item in filteredItems" :key="item.id">
      {{ item.name }}
    </li>
  </ul>
</template>

多条件检索扩展

若需支持多条件(如按名称和分类检索),可扩展计算属性逻辑:

<script>
export default {
  data() {
    return {
      searchName: '',
      searchCategory: '',
      items: [
        { id: 1, name: '苹果', category: '水果' },
        { id: 2, name: '胡萝卜', category: '蔬菜' }
      ]
    };
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => {
        const nameMatch = item.name.toLowerCase().includes(this.searchName.toLowerCase());
        const categoryMatch = item.category.toLowerCase().includes(this.searchCategory.toLowerCase());
        return nameMatch && categoryMatch;
      });
    }
  }
};
</script>

异步数据检索

若数据需从 API 获取,可使用 watchmethods 配合异步请求:

用vue实现条件检索

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [],
      isLoading: false
    };
  },
  watch: {
    searchQuery(newVal) {
      this.fetchItems(newVal);
    }
  },
  methods: {
    async fetchItems(query) {
      this.isLoading = true;
      try {
        const response = await axios.get('/api/items', { params: { q: query } });
        this.items = response.data;
      } catch (error) {
        console.error(error);
      } finally {
        this.isLoading = false;
      }
    }
  }
};
</script>

使用第三方库优化

对于复杂检索,可集成第三方库如 Lodash_.debounce 减少频繁请求:

import { debounce } from 'lodash';

export default {
  methods: {
    fetchItems: debounce(function(query) {
      // 异步逻辑
    }, 500)
  }
};

完整示例代码

以下是一个完整的 Vue 条件检索组件示例:

<template>
  <div>
    <input v-model="searchQuery" placeholder="输入检索条件" />
    <ul v-if="!isLoading">
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }} - {{ item.category }}
      </li>
    </ul>
    <p v-else>加载中...</p>
  </div>
</template>

<script>
import { debounce } from 'lodash';

export default {
  data() {
    return {
      searchQuery: '',
      items: [],
      isLoading: false
    };
  },
  computed: {
    filteredItems() {
      return this.items.filter(item =>
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      );
    }
  },
  created() {
    this.fetchItems();
  },
  methods: {
    fetchItems: debounce(async function() {
      this.isLoading = true;
      try {
        const response = await fetch('/api/items');
        this.items = await response.json();
      } catch (error) {
        console.error(error);
      } finally {
        this.isLoading = false;
      }
    }, 500)
  }
};
</script>

标签: 条件vue
分享给朋友:

相关文章

vue实现录音文件播放

vue实现录音文件播放

使用 Vue 实现录音文件播放 准备工作 确保项目中已安装必要的依赖,如 vue-audio-recorder 或原生 Web Audio API。录音文件播放通常涉及录音、存储和播放三个核心环节。…

vue 实现挂载

vue 实现挂载

Vue 实现挂载的基本方法 在 Vue 中,挂载是将 Vue 实例与 DOM 元素关联的过程。通过挂载,Vue 可以管理 DOM 并实现数据绑定和响应式更新。 创建 Vue 实例并挂载 const…

vue 实现注册

vue 实现注册

Vue 实现注册功能 注册功能通常包括表单验证、数据提交和用户反馈。以下是实现注册功能的步骤: 1. 创建注册表单组件 在 Vue 项目中创建一个注册表单组件,包含用户名、邮箱、密码等输入字段。…

vue实现ssr

vue实现ssr

Vue 实现 SSR(服务端渲染) Vue 的服务端渲染(SSR)允许在服务器端生成完整的 HTML 内容,再发送到客户端,提升首屏加载速度和 SEO 友好性。以下是实现 Vue SSR 的关键步骤和…

vue实现rgb调色

vue实现rgb调色

Vue实现RGB调色功能 实现思路 通过Vue的数据绑定和事件处理,动态调整RGB三个通道的值,实时更新显示颜色。 核心代码示例 <template> <div class=…

vscode实现vue高亮

vscode实现vue高亮

安装Vue官方扩展 在VSCode扩展商店中搜索并安装Volar,这是Vue团队推荐的官方插件,提供完整的Vue 3语言支持、语法高亮、智能提示等功能。安装后无需额外配置即可生效。 启用Volar的…