当前位置:首页 > VUE

vue实现列表页

2026-01-15 23:03:49VUE

Vue 实现列表页的方法

数据绑定与渲染

使用 v-for 指令动态渲染列表数据,结合 :key 确保渲染性能。示例代码:

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

<script>
export default {
  data() {
    return {
      listData: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' }
      ]
    }
  }
}
</script>

分页功能实现

通过计算属性实现分页逻辑,结合 v-model 绑定当前页码:

<template>
  <div>
    <ul>
      <li v-for="item in paginatedData" :key="item.id">{{ item.name }}</li>
    </ul>
    <button @click="currentPage--" :disabled="currentPage === 1">Previous</button>
    <span>Page {{ currentPage }} of {{ totalPages }}</span>
    <button @click="currentPage++" :disabled="currentPage >= totalPages">Next</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      listData: [...], // 原始数据
      currentPage: 1,
      itemsPerPage: 10
    }
  },
  computed: {
    paginatedData() {
      const start = (this.currentPage - 1) * this.itemsPerPage
      return this.listData.slice(start, start + this.itemsPerPage)
    },
    totalPages() {
      return Math.ceil(this.listData.length / this.itemsPerPage)
    }
  }
}
</script>

搜索过滤功能

通过计算属性实现搜索过滤,结合 v-model 绑定搜索关键词:

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

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

异步数据加载

使用 axiosfetch 从 API 获取列表数据:

<script>
import axios from 'axios'

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

列表项交互

为列表项添加点击事件处理:

<template>
  <ul>
    <li 
      v-for="item in listData" 
      :key="item.id"
      @click="handleItemClick(item)"
    >
      {{ item.name }}
    </li>
  </ul>
</template>

<script>
export default {
  methods: {
    handleItemClick(item) {
      console.log('Clicked:', item)
      // 可以跳转到详情页或执行其他操作
    }
  }
}
</script>

性能优化

对于大型列表,使用 vue-virtual-scroller 实现虚拟滚动:

<template>
  <RecycleScroller
    class="scroller"
    :items="listData"
    :item-size="50"
    key-field="id"
    v-slot="{ item }"
  >
    <div class="item">{{ item.name }}</div>
  </RecycleScroller>
</template>

<script>
import { RecycleScroller } from 'vue-virtual-scroller'
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'

export default {
  components: { RecycleScroller }
}
</script>

vue实现列表页

标签: 列表vue
分享给朋友:

相关文章

vue实现多级组件

vue实现多级组件

实现多级组件的基本结构 在Vue中实现多级组件通常涉及父子组件嵌套,通过props向下传递数据,通过$emit向上传递事件。多级组件的核心是递归或动态组件渲染。 <!-- 父组件 Parent…

vue怎么实现选中删除

vue怎么实现选中删除

实现选中删除功能的方法 在Vue中实现选中删除功能通常涉及以下几个关键步骤: 数据绑定与选中状态管理 使用v-model或v-for指令绑定列表数据,结合复选框或单选按钮实现选中状态管理。例如…

vue实现查询替换

vue实现查询替换

Vue 实现查询替换功能 在 Vue 中实现查询替换功能,可以通过数据绑定和字符串操作方法结合实现。以下是具体实现方式: 基础实现 <template> <div>…

vue 实现简单登陆

vue 实现简单登陆

以下是一个使用 Vue 3 实现的简单登录功能示例,包含表单验证和基础交互逻辑: 创建 Vue 组件 <template> <div class="login-contain…

vue异步组建实现原理

vue异步组建实现原理

Vue 异步组件实现原理 Vue 的异步组件允许将组件按需加载,通常用于代码分割或延迟加载非关键组件。其核心原理基于 Promise 和动态导入。 基本实现方式 通过 defineAsyncComp…

vue无限菜单怎么实现

vue无限菜单怎么实现

实现 Vue 无限菜单的方法 递归组件实现嵌套菜单 使用 Vue 的递归组件特性可以轻松实现无限级嵌套菜单。通过组件调用自身的方式处理嵌套数据。 <template> <ul&…