当前位置:首页 > VUE

发布动态功能实现vue

2026-02-21 08:03:30VUE

发布动态功能实现(Vue)

前端组件结构

创建一个名为PostDynamic.vue的组件,包含表单输入和提交逻辑:

<template>
  <div class="dynamic-form">
    <textarea v-model="content" placeholder="分享你的动态..."></textarea>
    <input type="file" @change="handleFileUpload" multiple>
    <button @click="submitDynamic">发布</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      content: '',
      files: []
    }
  },
  methods: {
    handleFileUpload(event) {
      this.files = Array.from(event.target.files)
    },
    async submitDynamic() {
      const formData = new FormData()
      formData.append('content', this.content)
      this.files.forEach(file => {
        formData.append('images[]', file)
      })

      try {
        await this.$axios.post('/api/dynamics', formData, {
          headers: { 'Content-Type': 'multipart/form-data' }
        })
        this.$emit('refresh')
        this.content = ''
        this.files = []
      } catch (error) {
        console.error(error)
      }
    }
  }
}
</script>

后端API接口(Node.js示例)

创建处理动态发布的路由:

发布动态功能实现vue

const express = require('express')
const multer = require('multer')
const router = express.Router()
const upload = multer({ dest: 'uploads/' })

router.post('/dynamics', upload.array('images[]'), async (req, res) => {
  try {
    const { content } = req.body
    const images = req.files.map(file => file.path)

    // 保存到数据库
    const newDynamic = await Dynamic.create({
      content,
      images,
      userId: req.user.id
    })

    res.status(201).json(newDynamic)
  } catch (error) {
    res.status(500).json({ error: error.message })
  }
})

数据库模型(MongoDB示例)

定义动态数据的Schema:

发布动态功能实现vue

const mongoose = require('mongoose')

const dynamicSchema = new mongoose.Schema({
  content: String,
  images: [String],
  userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
  createdAt: { type: Date, default: Date.now }
})

module.exports = mongoose.model('Dynamic', dynamicSchema)

前端页面集成

在主页或动态页面引入组件:

<template>
  <div>
    <PostDynamic @refresh="fetchDynamics" />
    <DynamicList :dynamics="dynamics" />
  </div>
</template>

<script>
import PostDynamic from '@/components/PostDynamic'
import DynamicList from '@/components/DynamicList'

export default {
  components: { PostDynamic, DynamicList },
  data() {
    return {
      dynamics: []
    }
  },
  mounted() {
    this.fetchDynamics()
  },
  methods: {
    async fetchDynamics() {
      const res = await this.$axios.get('/api/dynamics')
      this.dynamics = res.data
    }
  }
}
</script>

样式优化

添加基础样式提升用户体验:

.dynamic-form {
  padding: 15px;
  border-bottom: 1px solid #eee;
}
.dynamic-form textarea {
  width: 100%;
  height: 80px;
  padding: 10px;
  border: 1px solid #ddd;
  border-radius: 4px;
  resize: none;
}
.dynamic-form button {
  margin-top: 10px;
  padding: 8px 15px;
  background: #42b983;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}

标签: 功能动态
分享给朋友:

相关文章

vue电影功能实现

vue电影功能实现

Vue电影功能实现 数据获取与展示 使用Axios或Fetch API从电影API获取数据,例如TMDB或豆瓣API。在Vue组件的created或mounted生命周期钩子中发起请求,将返回的电影数…

vue 实现动态样式

vue 实现动态样式

在Vue中实现动态样式可以通过多种方式实现,以下是一些常见且灵活的方法: 绑定内联样式 使用v-bind:style(或简写:style)直接绑定样式对象,对象中的属性可以是动态的。例如:…

vue 实现收藏功能

vue 实现收藏功能

实现收藏功能的基本思路 在Vue中实现收藏功能通常涉及前端交互与后端数据存储的结合。核心逻辑包括:用户点击收藏按钮时切换状态,并通过API将状态同步到后端数据库。 前端组件实现 创建收藏按钮组件,…

vue前端实现打印功能

vue前端实现打印功能

使用Vue实现前端打印功能 使用window.print()方法 Vue中可以直接调用浏览器的window.print()方法实现打印功能。这种方法简单快捷,适用于打印整个页面或特定区域。 met…

php实现留言板功能

php实现留言板功能

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

vue实现功能插件

vue实现功能插件

Vue 功能插件实现方法 插件基本结构 Vue 插件通常需要暴露一个 install 方法,该方法接收 Vue 构造函数作为参数。基本结构如下: const MyPlugin = { insta…