当前位置:首页 > VUE

vue组件实现留言功能

2026-01-20 22:08:46VUE

实现留言功能的基本思路

留言功能通常需要前端界面展示留言列表、提交表单,后端处理数据存储和读取。以下基于Vue 3的Composition API实现一个基础版本。

vue组件实现留言功能

创建留言组件结构

新建MessageBoard.vue文件,包含留言列表和提交表单:

vue组件实现留言功能

<template>
  <div class="message-board">
    <div class="message-list">
      <div v-for="message in messages" :key="message.id" class="message-item">
        <strong>{{ message.author }}:</strong>
        <p>{{ message.content }}</p>
        <small>{{ formatDate(message.timestamp) }}</small>
      </div>
    </div>

    <form @submit.prevent="submitMessage">
      <input v-model="newMessage.author" placeholder="Your name" required>
      <textarea v-model="newMessage.content" placeholder="Your message" required></textarea>
      <button type="submit">Submit</button>
    </form>
  </div>
</template>

组件逻辑实现

<script>
import { ref } from 'vue';

export default {
  setup() {
    const messages = ref([
      { id: 1, author: 'User1', content: 'First message', timestamp: new Date() }
    ]);

    const newMessage = ref({
      author: '',
      content: ''
    });

    const submitMessage = () => {
      const message = {
        id: Date.now(),
        author: newMessage.value.author,
        content: newMessage.value.content,
        timestamp: new Date()
      };
      messages.value.push(message);
      newMessage.value = { author: '', content: '' };
    };

    const formatDate = (date) => {
      return new Date(date).toLocaleString();
    };

    return {
      messages,
      newMessage,
      submitMessage,
      formatDate
    };
  }
};
</script>

样式设计

<style scoped>
.message-board {
  max-width: 600px;
  margin: 0 auto;
  padding: 20px;
}

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

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

form {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

input, textarea {
  padding: 8px;
  border: 1px solid #ddd;
  border-radius: 4px;
}

button {
  padding: 10px;
  background-color: #42b983;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}
</style>

连接后端API(可选)

如需持久化存储,可添加axios请求:

import axios from 'axios';

// 获取留言
const fetchMessages = async () => {
  try {
    const response = await axios.get('/api/messages');
    messages.value = response.data;
  } catch (error) {
    console.error('Error fetching messages:', error);
  }
};

// 提交留言修改submitMessage
const submitMessage = async () => {
  try {
    const response = await axios.post('/api/messages', newMessage.value);
    messages.value.push(response.data);
    newMessage.value = { author: '', content: '' };
  } catch (error) {
    console.error('Error submitting message:', error);
  }
};

// 在setup中调用
onMounted(fetchMessages);

功能扩展建议

  • 添加留言删除功能
  • 实现留言分页加载
  • 增加用户认证系统
  • 添加富文本编辑器支持
  • 实现留言回复功能

以上实现提供了基础留言功能的核心代码,可根据实际需求进行扩展和调整。

标签: 组件留言
分享给朋友:

相关文章

vue实现组件

vue实现组件

Vue 实现组件的方法 Vue 中实现组件可以通过多种方式,包括全局注册、局部注册、单文件组件(SFC)等。以下是常见的实现方法。 全局注册组件 全局注册的组件可以在任何 Vue 实例或组件中使用。…

vue 实现弹窗组件

vue 实现弹窗组件

Vue 弹窗组件实现 基础弹窗组件结构 创建一个名为Modal.vue的文件,定义弹窗的基础结构和样式: <template> <div class="modal-mask"…

vue 实现树组件

vue 实现树组件

Vue 树形组件实现 基础树形结构实现 使用递归组件实现树形结构,核心是通过组件自身调用自身渲染嵌套数据。 <template> <ul> <li v-fo…

vue组件实现跳转

vue组件实现跳转

Vue 组件实现跳转的方法 在 Vue 中实现页面跳转可以通过多种方式,以下是常见的几种方法: 使用 router-link 组件 router-link 是 Vue Router 提供的组件,用于…

vue实现组件化

vue实现组件化

Vue 组件化实现方法 组件定义 使用 .vue 单文件组件格式,包含 <template>、<script> 和 <style> 三个部分: <templ…

vue实现组件递归

vue实现组件递归

递归组件的实现方法 在Vue中实现递归组件,核心是通过组件在自身模板中调用自身。需要明确递归终止条件以避免无限循环。 定义递归组件 给组件设置name选项,便于在模板中自引用: export de…