当前位置:首页 > 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中可以通过组件化设计、状态管理库(如Vuex或Pinia)和后端API配合实现。 审核状态管理 使用Vuex或Pinia存…

vue功能实现

vue功能实现

Vue 功能实现指南 Vue.js 是一个流行的前端框架,用于构建用户界面和单页应用。以下是 Vue 功能实现的关键方法和技术。 数据绑定与响应式 Vue 的核心特性是数据绑定和响应式系统。通过 d…

php怎么实现登录功能

php怎么实现登录功能

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

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

vue实现插件功能

vue实现插件功能

Vue 插件实现方法 安装与注册插件 在 Vue 项目中,插件通常以独立模块形式存在。通过 Vue.use() 方法注册插件,该方法会自动调用插件的 install 函数。 // 引入插件 imp…

vue定位功能实现

vue定位功能实现

Vue 中实现定位功能的方法 使用浏览器原生 Geolocation API 通过 navigator.geolocation 获取用户当前位置,需注意浏览器兼容性和用户授权问题: // 在Vue组…