当前位置:首页 > VUE

vue实现好友列表

2026-03-26 22:09:07VUE

实现好友列表的基本结构

使用Vue.js实现好友列表需要结合组件化开发思想。创建一个FriendList.vue组件作为容器,内部嵌套FriendItem.vue子组件展示单个好友信息。

模板部分示例:

<template>
  <div class="friend-list">
    <friend-item 
      v-for="friend in friends" 
      :key="friend.id"
      :friend="friend"
      @select="handleSelect"
    />
  </div>
</template>

数据定义与初始化

在Vue组件的datasetup中定义好友数据。推荐使用数组存储好友对象,每个对象包含必要属性:

data() {
  return {
    friends: [
      { id: 1, name: '张三', avatar: '/avatars/1.jpg', online: true },
      { id: 2, name: '李四', avatar: '/avatars/2.jpg', online: false }
    ]
  }
}

实现好友项组件

创建独立的FriendItem.vue组件接收父组件传递的prop:

vue实现好友列表

<template>
  <div 
    class="friend-item"
    :class="{ 'is-online': friend.online }"
    @click="$emit('select', friend.id)"
  >
    <img :src="friend.avatar" class="avatar">
    <span>{{ friend.name }}</span>
  </div>
</template>

<script>
export default {
  props: {
    friend: {
      type: Object,
      required: true
    }
  }
}
</script>

添加交互功能

在父组件中实现好友选择逻辑:

methods: {
  handleSelect(friendId) {
    const selectedFriend = this.friends.find(f => f.id === friendId)
    console.log('Selected:', selectedFriend.name)
    // 可触发路由跳转或打开聊天窗口
  }
}

样式优化

使用CSS为列表添加视觉效果:

.friend-list {
  width: 300px;
  border-right: 1px solid #eee;
}

.friend-item {
  padding: 12px;
  display: flex;
  align-items: center;
  cursor: pointer;
}

.friend-item:hover {
  background-color: #f5f5f5;
}

.avatar {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  margin-right: 12px;
}

.is-online .avatar {
  border: 2px solid #4CAF50;
}

数据动态加载

实际项目中通常从API获取数据:

vue实现好友列表

async created() {
  try {
    const response = await axios.get('/api/friends')
    this.friends = response.data
  } catch (error) {
    console.error('加载好友列表失败', error)
  }
}

状态管理优化

对于大型应用,建议使用Vuex或Pinia管理好友状态:

// 在store中定义
state: {
  friends: []
},
actions: {
  async loadFriends({ commit }) {
    const friends = await fetchFriends()
    commit('SET_FRIENDS', friends)
  }
}

实现分组功能

扩展数据结构支持分组显示:

data() {
  return {
    groupedFriends: {
      '同事': [...],
      '同学': [...],
      '家人': [...]
    }
  }
}

模板中使用v-for嵌套渲染:

<div v-for="(group, name) in groupedFriends" :key="name">
  <h3>{{ name }}</h3>
  <friend-item v-for="friend in group" ... />
</div>

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

相关文章

vue实现计时

vue实现计时

Vue 实现计时功能 在 Vue 中实现计时功能可以通过多种方式完成,以下是几种常见的方法: 使用 setInterval 实现基础计时器 通过 setInterval 和 clearInterva…

vue实现input

vue实现input

Vue 实现 Input 输入框的方法 基本双向绑定 使用 v-model 指令实现双向数据绑定,适用于大多数表单场景: <template> <input v-model="…

vue课程实现

vue课程实现

Vue 课程实现方案 课程内容设计 Vue课程应从基础到高级逐步展开,涵盖Vue核心概念、组件化开发、状态管理、路由、构建工具等。基础部分包括Vue实例、模板语法、计算属性和侦听器。中级部分深入组件通…

vue实现机制

vue实现机制

Vue 实现机制的核心原理 Vue.js 的核心实现机制主要基于响应式系统、虚拟 DOM 和组件化设计。以下是关键实现细节: 响应式系统 Vue 通过 Object.defineProperty(V…

vue实现计算

vue实现计算

Vue 实现计算的方法 在 Vue 中实现计算功能可以通过多种方式完成,主要包括计算属性(computed)、方法(methods)和侦听器(watch)。以下是具体的实现方法: 计算属性(Comp…

javascript实现vue

javascript实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,主要包括数据绑定、响应式系统和虚拟 DOM。以下是一个简化的实现示例。 数据响应式系统 通过 Object.de…