当前位置:首页 > VUE

vue实现视频列表数据

2026-01-22 06:14:11VUE

Vue实现视频列表数据

在Vue中实现视频列表数据通常涉及数据绑定、组件化以及API调用。以下是一个完整的实现方案:

数据准备与绑定

  1. 定义视频列表数据
    在Vue组件的data中初始化视频列表数据:

    data() {
      return {
        videos: [
          { id: 1, title: '视频1', url: 'video1.mp4', cover: 'cover1.jpg' },
          { id: 2, title: '视频2', url: 'video2.mp4', cover: 'cover2.jpg' }
        ]
      }
    }
  2. 动态加载数据
    通过异步请求(如axios)从后端API获取数据:

    methods: {
      async fetchVideos() {
        try {
          const response = await axios.get('/api/videos');
          this.videos = response.data;
        } catch (error) {
          console.error('加载视频列表失败:', error);
        }
      }
    },
    mounted() {
      this.fetchVideos();
    }

列表渲染与组件化

  1. 使用v-for渲染列表
    在模板中循环渲染视频列表项:

    vue实现视频列表数据

    <div class="video-list">
      <div v-for="video in videos" :key="video.id" class="video-item">
        <img :src="video.cover" :alt="video.title">
        <h3>{{ video.title }}</h3>
        <video controls :src="video.url"></video>
      </div>
    </div>
  2. 封装视频组件
    将单个视频项抽离为子组件(如VideoCard.vue):

    <!-- VideoCard.vue -->
    <template>
      <div class="video-card">
        <img :src="cover" :alt="title">
        <h3>{{ title }}</h3>
        <video controls :src="url"></video>
      </div>
    </template>
    
    <script>
    export default {
      props: ['id', 'title', 'url', 'cover']
    }
    </script>

功能扩展

  1. 分页加载
    添加分页逻辑,结合v-infinite-scroll等插件实现懒加载:

    vue实现视频列表数据

    data() {
      return {
        page: 1,
        pageSize: 10,
        isLoading: false
      }
    },
    methods: {
      async loadMore() {
        if (this.isLoading) return;
        this.isLoading = true;
        const response = await axios.get('/api/videos', {
          params: { page: this.page++, size: this.pageSize }
        });
        this.videos.push(...response.data);
        this.isLoading = false;
      }
    }
  2. 搜索过滤
    通过计算属性实现客户端搜索:

    computed: {
      filteredVideos() {
        return this.videos.filter(video => 
          video.title.toLowerCase().includes(this.searchQuery.toLowerCase())
        );
      }
    }

样式优化

  1. 响应式布局
    使用CSS Grid或Flexbox实现自适应布局:

    .video-list {
      display: grid;
      grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
      gap: 20px;
    }
  2. 视频封面占位
    为未加载的视频添加占位图:

    <img 
      :src="video.cover || 'placeholder.jpg'" 
      @error="video.cover = 'fallback.jpg'"
    >

完整示例代码

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索视频">
    <div class="video-list">
      <VideoCard 
        v-for="video in filteredVideos" 
        :key="video.id"
        v-bind="video"
      />
    </div>
    <button @click="loadMore" :disabled="isLoading">
      {{ isLoading ? '加载中...' : '加载更多' }}
    </button>
  </div>
</template>

<script>
import VideoCard from './VideoCard.vue';
import axios from 'axios';

export default {
  components: { VideoCard },
  data() {
    return {
      videos: [],
      searchQuery: '',
      page: 1,
      isLoading: false
    }
  },
  computed: {
    filteredVideos() {
      return this.videos.filter(video => 
        video.title.toLowerCase().includes(this.searchQuery.toLowerCase())
      );
    }
  },
  methods: {
    async fetchVideos() {
      const res = await axios.get('/api/videos');
      this.videos = res.data;
    },
    async loadMore() {
      this.isLoading = true;
      const res = await axios.get('/api/videos', {
        params: { page: this.page++ }
      });
      this.videos.push(...res.data);
      this.isLoading = false;
    }
  },
  mounted() {
    this.fetchVideos();
  }
}
</script>

标签: 数据列表
分享给朋友:

相关文章

vue实现数据结构图

vue实现数据结构图

Vue实现数据结构图的方法 使用Vue实现数据结构图可以通过多种方式完成,具体取决于需求复杂度。以下是几种常见的方法: 使用第三方库(如D3.js或Vis.js) D3.js或Vis.js等库专门…

vue怎么实现数据

vue怎么实现数据

Vue 数据实现方法 Vue 提供了多种方式来实现数据的绑定和管理,核心是通过响应式系统确保数据与视图的同步。以下是常见的实现方法: 数据绑定 在 Vue 实例的 data 选项中定义数据,Vue…

vue实现数据增加

vue实现数据增加

vue实现数据增加的几种方法 在Vue中实现数据增加通常涉及以下几个核心概念和方法: 响应式数据声明 在Vue组件中,使用data选项或ref(Vue 3)声明响应式数据: // Vue 2…

vue实现WiFi列表

vue实现WiFi列表

获取WiFi列表的Vue实现 使用Vue获取WiFi列表需要结合浏览器API或后端服务,因为浏览器出于安全限制无法直接访问系统WiFi信息。以下是两种常见实现方式: 方法一:通过Web API获取附…

vue实现列表水印

vue实现列表水印

实现列表水印的方法 在Vue中为列表添加水印可以通过多种方式实现,以下是几种常见的方法: 使用CSS背景图 通过CSS的background-image属性为列表元素添加水印背景。水印可以是文字或…

vue 实现长列表

vue 实现长列表

vue 实现长列表的优化方法 使用虚拟滚动技术,只渲染可视区域内的元素,大幅减少DOM节点数量。通过计算滚动位置动态更新显示内容,降低内存占用和渲染压力。 <template> &l…