当前位置:首页 > VUE

vue实现好友列表

2026-02-09 13:24:59VUE

Vue 实现好友列表功能

功能分析 好友列表通常需要展示用户头像、昵称、在线状态等基础信息,支持搜索、分组、最近聊天排序等功能。以下分模块实现核心逻辑。

数据准备 假设好友数据格式如下:

friends: [
  {
    id: 1,
    name: '张三',
    avatar: 'https://example.com/avatar1.jpg',
    group: '同事',
    online: true,
    lastMessage: '2023-08-20T10:00:00'
  },
  // 更多好友数据...
]

基础列表渲染

<template>
  <div class="friend-list">
    <div v-for="friend in filteredFriends" :key="friend.id" class="friend-item">
      <img :src="friend.avatar" class="avatar" />
      <div class="info">
        <span class="name">{{ friend.name }}</span>
        <span class="status" :class="{ online: friend.online }"></span>
      </div>
    </div>
  </div>
</template>

分组展示实现

vue实现好友列表

computed: {
  groupedFriends() {
    return this.friends.reduce((groups, friend) => {
      const group = friend.group || '未分组';
      if (!groups[group]) groups[group] = [];
      groups[group].push(friend);
      return groups;
    }, {});
  }
}

搜索功能实现

data() {
  return {
    searchQuery: ''
  }
},
computed: {
  filteredFriends() {
    const query = this.searchQuery.toLowerCase();
    return this.friends.filter(friend => 
      friend.name.toLowerCase().includes(query)
    );
  }
}

交互增强 添加点击事件和状态标记:

<div 
  v-for="friend in filteredFriends" 
  @click="selectFriend(friend)"
  :class="{ active: selectedFriend?.id === friend.id }">
</div>

样式建议

vue实现好友列表

.friend-item {
  display: flex;
  align-items: center;
  padding: 10px;
  cursor: pointer;
}
.avatar {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  margin-right: 12px;
}
.status {
  display: inline-block;
  width: 8px;
  height: 8px;
  background: #ccc;
  border-radius: 50%;
}
.status.online {
  background: #4CAF50;
}

性能优化 对于大型好友列表:

// 使用虚拟滚动
import { RecycleScroller } from 'vue-virtual-scroller'
components: { RecycleScroller }

完整组件示例

export default {
  data() {
    return {
      friends: [...],
      searchQuery: '',
      selectedFriend: null
    }
  },
  computed: {
    filteredFriends() {
      // 搜索过滤逻辑
    }
  },
  methods: {
    selectFriend(friend) {
      this.selectedFriend = friend
      this.$emit('select', friend)
    }
  }
}

扩展功能建议

  • 添加下拉刷新加载更多好友
  • 实现右键菜单操作(删除、备注等)
  • 集成WebSocket实时更新在线状态
  • 添加好友分组折叠/展开功能

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

相关文章

vue实现防抖节流

vue实现防抖节流

Vue 中实现防抖(Debounce) 防抖的核心是延迟执行函数,在连续触发时取消前一次的调用,只执行最后一次。适用于输入框搜索、窗口大小调整等场景。 方法1:使用 Lodash 的 _.debo…

vue element实现

vue element实现

Vue Element UI 实现 Vue Element UI 是基于 Vue.js 的组件库,提供丰富的 UI 组件,适合快速开发企业级中后台产品。以下是一些关键实现方法和步骤: 安装 Vue…

vue实现粘贴

vue实现粘贴

Vue 实现粘贴功能的方法 在 Vue 中实现粘贴功能通常涉及监听粘贴事件并处理剪贴板数据。以下是几种常见的实现方式: 监听原生粘贴事件 通过 @paste 指令或原生 addEventListen…

vue  实现tab

vue 实现tab

实现 Tab 切换功能 在 Vue 中实现 Tab 切换功能可以通过动态组件或条件渲染完成。以下是两种常见方法: 使用 v-if 或 v-show 实现条件渲染 通过绑定 currentTab 变量…

vue实现tap

vue实现tap

Vue 实现 Tap 事件 在移动端开发中,Tap 事件比 Click 事件更常用,因为 Click 事件有 300ms 延迟。以下是几种在 Vue 中实现 Tap 事件的方法。 使用第三方库 安…

vue jwt实现

vue jwt实现

Vue JWT 实现方法 安装依赖 确保项目中安装了 jsonwebtoken(后端)和 axios(前端)。若使用 Vue 3,可搭配 vue-router 和 pinia(或 vuex)管理状态。…