当前位置:首页 > VUE

vue实现列表查询功能

2026-01-22 05:11:12VUE

实现列表查询功能的基本步骤

在Vue中实现列表查询功能通常涉及数据绑定、事件处理和API调用。以下是具体实现方法。

数据绑定与列表渲染

使用v-for指令渲染列表数据,确保数据响应式更新。

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索..." />
    <ul>
      <li v-for="item in filteredList" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

处理查询逻辑

通过计算属性filteredList实现实时过滤,避免频繁触发方法调用。

vue实现列表查询功能

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: 'Apple' },
        { id: 2, name: 'Banana' },
        { id: 3, name: 'Orange' }
      ]
    }
  },
  computed: {
    filteredList() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

异步数据加载

结合axiosfetch从后端API获取数据,并处理加载状态。

<script>
import axios from 'axios';

export default {
  data() {
    return {
      searchQuery: '',
      items: [],
      isLoading: false
    }
  },
  async created() {
    this.isLoading = true;
    try {
      const response = await axios.get('/api/items');
      this.items = response.data;
    } catch (error) {
      console.error(error);
    } finally {
      this.isLoading = false;
    }
  },
  computed: {
    filteredList() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

优化查询性能

对于大数据量列表,使用防抖(debounce)减少频繁查询带来的性能问题。

vue实现列表查询功能

<script>
import _ from 'lodash';

export default {
  data() {
    return {
      searchQuery: '',
      items: []
    }
  },
  created() {
    this.debouncedFilter = _.debounce(this.fetchItems, 300);
  },
  watch: {
    searchQuery() {
      this.debouncedFilter();
    }
  },
  methods: {
    async fetchItems() {
      const response = await axios.get('/api/items', {
        params: { q: this.searchQuery }
      });
      this.items = response.data;
    }
  }
}
</script>

分页处理

结合分页组件实现大数据量分页查询,减轻前端渲染压力。

<template>
  <div>
    <input v-model="searchQuery" @input="fetchItems" />
    <ul>
      <li v-for="item in items" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
    <button @click="prevPage" :disabled="page === 1">上一页</button>
    <span>当前页: {{ page }}</span>
    <button @click="nextPage">下一页</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [],
      page: 1,
      pageSize: 10
    }
  },
  methods: {
    async fetchItems() {
      const response = await axios.get('/api/items', {
        params: {
          q: this.searchQuery,
          page: this.page,
          size: this.pageSize
        }
      });
      this.items = response.data;
    },
    nextPage() {
      this.page++;
      this.fetchItems();
    },
    prevPage() {
      if (this.page > 1) {
        this.page--;
        this.fetchItems();
      }
    }
  }
}
</script>

样式与交互优化

添加加载状态提示和空数据提示,提升用户体验。

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索..." />
    <div v-if="isLoading">加载中...</div>
    <ul v-else>
      <li v-for="item in filteredList" :key="item.id">
        {{ item.name }}
      </li>
      <li v-if="filteredList.length === 0">暂无数据</li>
    </ul>
  </div>
</template>

分享给朋友:

相关文章

h5实现展开列表

h5实现展开列表

使用HTML5和CSS实现展开列表 在HTML5中,可以通过结合CSS和JavaScript实现展开列表效果。以下是几种常见的方法: 方法1:使用details和summary标签 HTML5提供…

h5 实现列表

h5 实现列表

列表实现方法 在HTML5中,可以通过多种方式实现列表,包括无序列表、有序列表和自定义列表。以下是具体的实现方法。 无序列表 无序列表使用<ul>标签,列表项使用<li>标签…

vue实现列表循环

vue实现列表循环

列表循环的实现方式 在Vue中实现列表循环主要依赖于v-for指令,该指令基于源数据多次渲染元素或模板块。 基础数组循环 使用v-for遍历数组时,语法为item in items或(item, i…

jquery列表

jquery列表

jQuery 列表操作 jQuery 提供了多种方法来操作 HTML 列表(如 <ul> 或 <ol>),包括动态添加、删除、修改列表项,以及事件绑定等。 创建列表 使用 j…

vue实现列表权限

vue实现列表权限

实现列表权限控制的方法 在Vue中实现列表权限控制通常涉及前端逻辑与后端数据的配合。以下是几种常见方法: 基于角色或权限码的渲染控制 通过v-if或v-show指令根据用户权限动态渲染列表项: &…

vue实现列表分页

vue实现列表分页

Vue 列表分页实现方法 基础分页实现 安装依赖(如使用第三方库) npm install vue-paginate 模板部分示例 <template> <div>…