当前位置:首页 > VUE

vue留言功能实现

2026-01-17 09:25:18VUE

Vue 留言功能实现

数据模型设计

留言功能通常需要以下数据结构:

  • id: 唯一标识符
  • content: 留言内容
  • createdAt: 创建时间
  • author: 作者信息(可选)

示例数据结构:

{
  id: 1,
  content: "这是一条测试留言",
  createdAt: "2023-05-01T10:00:00Z",
  author: {
    name: "用户A",
    avatar: "/path/to/avatar.jpg"
  }
}

前端组件实现

创建留言列表和留言表单组件:

留言列表组件:

<template>
  <div class="message-list">
    <div v-for="message in messages" :key="message.id" class="message-item">
      <div class="message-content">{{ message.content }}</div>
      <div class="message-meta">
        <span class="author">{{ message.author.name }}</span>
        <span class="time">{{ formatDate(message.createdAt) }}</span>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    messages: {
      type: Array,
      required: true
    }
  },
  methods: {
    formatDate(dateString) {
      return new Date(dateString).toLocaleString()
    }
  }
}
</script>

留言表单组件:

vue留言功能实现

<template>
  <form @submit.prevent="handleSubmit" class="message-form">
    <textarea v-model="content" placeholder="请输入留言内容"></textarea>
    <button type="submit">提交留言</button>
  </form>
</template>

<script>
export default {
  data() {
    return {
      content: ''
    }
  },
  methods: {
    handleSubmit() {
      if (!this.content.trim()) return

      this.$emit('submit', {
        content: this.content,
        createdAt: new Date().toISOString()
      })
      this.content = ''
    }
  }
}
</script>

状态管理

使用Vuex管理留言状态:

store.js:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    messages: []
  },
  mutations: {
    ADD_MESSAGE(state, message) {
      state.messages.unshift({
        ...message,
        id: Date.now(),
        author: {
          name: '当前用户',
          avatar: '/default-avatar.jpg'
        }
      })
    }
  },
  actions: {
    addMessage({ commit }, message) {
      commit('ADD_MESSAGE', message)
    }
  }
})

后端集成

与后端API交互的示例:

vue留言功能实现

api.js:

import axios from 'axios'

export default {
  async getMessages() {
    const response = await axios.get('/api/messages')
    return response.data
  },

  async postMessage(message) {
    const response = await axios.post('/api/messages', message)
    return response.data
  }
}

完整页面整合

将组件和状态管理整合到页面中:

<template>
  <div class="message-page">
    <h1>留言板</h1>
    <message-form @submit="addMessage" />
    <message-list :messages="messages" />
  </div>
</template>

<script>
import MessageForm from './MessageForm.vue'
import MessageList from './MessageList.vue'
import api from './api'

export default {
  components: {
    MessageForm,
    MessageList
  },
  computed: {
    messages() {
      return this.$store.state.messages
    }
  },
  methods: {
    async addMessage(message) {
      try {
        await api.postMessage(message)
        this.$store.dispatch('addMessage', message)
      } catch (error) {
        console.error('留言提交失败:', error)
      }
    }
  },
  async created() {
    try {
      const messages = await api.getMessages()
      this.$store.commit('SET_MESSAGES', messages)
    } catch (error) {
      console.error('获取留言失败:', error)
    }
  }
}
</script>

样式设计

添加基本样式增强用户体验:

.message-list {
  margin-top: 20px;
}

.message-item {
  padding: 15px;
  border-bottom: 1px solid #eee;
}

.message-content {
  margin-bottom: 8px;
}

.message-meta {
  font-size: 0.8em;
  color: #666;
}

.message-form textarea {
  width: 100%;
  min-height: 100px;
  padding: 10px;
  margin-bottom: 10px;
}

.message-form button {
  background: #42b983;
  color: white;
  border: none;
  padding: 8px 15px;
  border-radius: 4px;
  cursor: pointer;
}

标签: 留言功能
分享给朋友:

相关文章

php实现留言板功能

php实现留言板功能

PHP 留言板功能实现 数据库设计 创建数据库表 messages,包含以下字段: id:自增主键 name:留言者姓名(VARCHAR) email:留言者邮箱(VARCHAR) content:…

uniapp实现选项卡功能

uniapp实现选项卡功能

实现选项卡功能的基本方法 在uniapp中实现选项卡功能通常需要使用uni-segmented-control组件或自定义样式结合swiper组件。以下是两种常见实现方式: 使用uni-segmen…

vue电影功能实现

vue电影功能实现

Vue 电影功能实现 数据获取与展示 使用 Axios 或 Fetch API 从电影 API(如 TMDb、豆瓣 API)获取数据。在 Vue 的 created 或 mounted 生命周期钩子中…

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

php购物车功能实现

php购物车功能实现

数据库设计 购物车功能通常需要设计数据库表来存储商品和用户信息。常见的表包括: products 表:存储商品信息,如商品ID、名称、价格、库存等。 users 表:存储用户信息,如用户ID、用户名…

php秒杀功能的实现

php秒杀功能的实现

秒杀功能的核心设计 高并发场景下秒杀系统的核心在于解决超卖问题和性能瓶颈。需要结合缓存、队列、锁机制等技术实现。 数据库设计 商品表需包含库存字段,例如: CREATE TABLE `seckil…