当前位置:首页 > VUE

vue实现列表页面

2026-01-17 12:30:00VUE

Vue 列表页面实现方案

基础列表渲染

使用 v-for 指令渲染数组数据,配合 :key 提升性能:

<template>
  <ul>
    <li v-for="item in items" :key="item.id">
      {{ item.name }} - {{ item.price }}
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: '商品A', price: 100 },
        { id: 2, name: '商品B', price: 200 }
      ]
    }
  }
}
</script>

分页功能实现

通过计算属性实现分页逻辑:

<template>
  <div>
    <table>
      <tr v-for="item in paginatedItems" :key="item.id">
        <td>{{ item.name }}</td>
      </tr>
    </table>
    <button @click="currentPage--" :disabled="currentPage === 1">上一页</button>
    <span>{{ currentPage }}/{{ totalPages }}</span>
    <button @click="currentPage++" :disabled="currentPage >= totalPages">下一页</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [...], // 完整数据
      currentPage: 1,
      pageSize: 10
    }
  },
  computed: {
    totalPages() {
      return Math.ceil(this.items.length / this.pageSize)
    },
    paginatedItems() {
      const start = (this.currentPage - 1) * this.pageSize
      return this.items.slice(start, start + this.pageSize)
    }
  }
}
</script>

搜索过滤功能

结合计算属性实现实时搜索:

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

<script>
export default {
  data() {
    return {
      searchQuery: '',
      allItems: [...]
    }
  },
  computed: {
    filteredItems() {
      return this.allItems.filter(item => 
        item.title.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

排序功能

通过方法实现多列排序:

<template>
  <table>
    <thead>
      <tr>
        <th @click="sortBy('name')">名称</th>
        <th @click="sortBy('price')">价格</th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="item in sortedItems" :key="item.id">
        <td>{{ item.name }}</td>
        <td>{{ item.price }}</td>
      </tr>
    </tbody>
  </table>
</template>

<script>
export default {
  data() {
    return {
      items: [...],
      sortKey: '',
      sortOrder: 1 // 1升序,-1降序
    }
  },
  computed: {
    sortedItems() {
      return [...this.items].sort((a, b) => {
        return a[this.sortKey] > b[this.sortKey] ? this.sortOrder : -this.sortOrder
      })
    }
  },
  methods: {
    sortBy(key) {
      this.sortOrder = this.sortKey === key ? -this.sortOrder : 1
      this.sortKey = key
    }
  }
}
</script>

异步数据加载

使用 axios 获取远程数据:

vue实现列表页面

<script>
import axios from 'axios'

export default {
  data() {
    return {
      items: [],
      loading: false,
      error: null
    }
  },
  async created() {
    try {
      this.loading = true
      const response = await axios.get('/api/items')
      this.items = response.data
    } catch (err) {
      this.error = err.message
    } finally {
      this.loading = false
    }
  }
}
</script>

性能优化建议

  1. 虚拟滚动:对于超长列表使用 vue-virtual-scroller 等库
  2. 分页加载:结合后端 API 实现真分页而非前端分页
  3. 防抖处理:对搜索输入框添加防抖函数
  4. 组件拆分:将列表项拆分为独立组件提高复用性

以上方案可根据实际需求组合使用,构建完整的列表功能。

标签: 页面列表
分享给朋友:

相关文章

js实现页面跳转

js实现页面跳转

使用 window.location.href 通过修改 window.location.href 实现页面跳转,直接赋值目标 URL 即可。 window.location.href = 'h…

vue实现页面截屏

vue实现页面截屏

使用html2canvas库实现截屏 安装html2canvas库 npm install html2canvas --save 在Vue组件中引入并使用 import html2canvas f…

jquery加载页面

jquery加载页面

jQuery 加载页面内容的方法 使用 .load() 方法 通过 AJAX 请求加载远程数据并插入到指定元素中。适用于加载部分页面片段。 $("#targetElement").load("ext…

H5页面全景怎么实现

H5页面全景怎么实现

H5页面全景实现方法 H5页面全景效果可以通过多种技术实现,以下是几种常见的方法: 使用Three.js库 Three.js是一个基于WebGL的JavaScript库,适合创建复杂的3D全景效果。…

h5页面实现语音输入

h5页面实现语音输入

语音输入实现方法 H5页面实现语音输入主要依赖浏览器的Web Speech API,包括语音识别(SpeechRecognition)和语音合成(SpeechSynthesis)两部分。以下是具体实现…

vue实现影片列表

vue实现影片列表

Vue 实现影片列表 使用 Vue CLI 创建项目 确保已安装 Vue CLI,通过以下命令创建新项目: vue create movie-list cd movie-list 安装依赖 根据…