当前位置:首页 > 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实现收货功能的基本思路 收货功能通常涉及前端界面交互、后端数据更新和状态管理。在Vue中,可以通过组件化开发实现这一功能,结合API调用与状态管理工具(如Vuex或Pinia)。 创建收货按钮…

vue实现名字查找功能

vue实现名字查找功能

实现名字查找功能 在Vue中实现名字查找功能,可以通过多种方式完成。以下是几种常见的实现方法: 使用v-model和computed属性 创建一个输入框,使用v-model绑定输入的值,通过comp…

vue 实现动态样式

vue 实现动态样式

动态样式绑定方法 在Vue中实现动态样式主要通过v-bind:class和v-bind:style指令完成,以下是具体实现方式: 类名绑定 <div :class="{ active: is…

vue实现轨道功能

vue实现轨道功能

Vue 实现轨道功能的方法 轨道功能通常指在界面中实现元素沿特定路径移动的效果,例如进度条、时间轴或动画轨迹。以下是几种常见的实现方式: 使用 CSS 动画与 Vue 结合 通过 Vue 动态绑定样…

vue实现app功能

vue实现app功能

Vue 实现 App 功能的常见方法 使用 Capacitor 或 Cordova 进行混合开发 Vue 结合 Capacitor 或 Cordova 可以将 Web 应用打包成原生 App。Capa…

vue实现数据动态

vue实现数据动态

Vue 实现数据动态绑定的方法 Vue.js 的核心特性之一是数据绑定,通过响应式系统实现数据的动态更新。以下是几种常见的实现方式: 双向数据绑定(v-model) 使用 v-model 指令可以实…