当前位置:首页 > 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;
}

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

相关文章

vue实现用户添加功能

vue实现用户添加功能

实现用户添加功能的步骤 表单设计与数据绑定 在Vue组件中设计一个表单,包含用户名、邮箱、密码等字段。使用v-model指令实现双向数据绑定,将表单输入与组件的数据属性关联起来。 <t…

vue实现按钮实现点击功能

vue实现按钮实现点击功能

实现按钮点击功能 在Vue中实现按钮点击功能可以通过v-on指令或@缩写来绑定事件。以下是几种常见的实现方式: 使用v-on指令 通过v-on:click绑定点击事件,触发定义在methods中的方…

原生实现vue功能

原生实现vue功能

原生 JavaScript 实现 Vue 核心功能 使用原生 JavaScript 模拟 Vue 的核心功能(如数据绑定、虚拟 DOM、响应式更新等),可以通过以下方式实现: 数据响应式系统 通过…

php怎么实现登录功能

php怎么实现登录功能

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

vue 实现单选功能

vue 实现单选功能

实现单选功能的方法 在Vue中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML单选按钮 通过v-model绑定数据,结合原生<input type="radio"&g…

vue实现修改功能

vue实现修改功能

Vue 实现修改功能的方法 数据绑定与表单处理 使用v-model实现双向数据绑定,快速获取表单输入值。适用于表单类修改场景: <template> <input v-mode…