当前位置:首页 > VUE

vue实现简单对话

2026-01-19 03:01:54VUE

Vue实现简单对话功能

数据绑定与列表渲染

使用Vue的v-for指令渲染对话列表,结合v-model实现输入框双向绑定:

<template>
  <div>
    <div v-for="(msg, index) in messages" :key="index">
      {{ msg.sender }}: {{ msg.text }}
    </div>
    <input v-model="newMessage" @keyup.enter="sendMessage">
  </div>
</template>

<script>
export default {
  data() {
    return {
      messages: [],
      newMessage: ''
    }
  }
}
</script>

消息发送逻辑

添加方法处理消息发送,包括清空输入框和滚动到最新消息:

methods: {
  sendMessage() {
    if (this.newMessage.trim() === '') return

    this.messages.push({
      sender: 'User',
      text: this.newMessage
    })

    this.newMessage = ''
    this.$nextTick(() => {
      window.scrollTo(0, document.body.scrollHeight)
    })
  }
}

模拟AI回复

添加定时器模拟AI回复,展示异步交互效果:

methods: {
  sendMessage() {
    // ...用户消息处理逻辑

    setTimeout(() => {
      this.messages.push({
        sender: 'AI',
        text: 'This is a simulated reply'
      })
    }, 1000)
  }
}

样式优化

添加基础样式改善对话界面视觉效果:

<style scoped>
.message {
  margin: 10px;
  padding: 8px;
  border-radius: 4px;
}
.user-message {
  background-color: #e3f2fd;
  text-align: right;
}
.ai-message {
  background-color: #f5f5f5;
}
input {
  width: 100%;
  padding: 10px;
  box-sizing: border-box;
}
</style>

完整组件示例

整合所有功能的完整组件代码:

<template>
  <div class="chat-container">
    <div 
      v-for="(msg, index) in messages" 
      :key="index" 
      class="message"
      :class="msg.sender === 'User' ? 'user-message' : 'ai-message'"
    >
      {{ msg.sender }}: {{ msg.text }}
    </div>
    <input 
      v-model="newMessage" 
      @keyup.enter="sendMessage"
      placeholder="Type your message..."
    >
  </div>
</template>

<script>
export default {
  data() {
    return {
      messages: [
        { sender: 'AI', text: 'Hello! How can I help you?' }
      ],
      newMessage: ''
    }
  },
  methods: {
    sendMessage() {
      const userMessage = this.newMessage.trim()
      if (!userMessage) return

      this.messages.push({
        sender: 'User',
        text: userMessage
      })

      this.newMessage = ''

      setTimeout(() => {
        this.messages.push({
          sender: 'AI',
          text: `Received: "${userMessage}"`
        })
      }, 800)
    }
  }
}
</script>

<style scoped>
.chat-container {
  max-width: 600px;
  margin: 0 auto;
}
.message {
  margin: 10px;
  padding: 8px 12px;
  border-radius: 18px;
  max-width: 70%;
}
.user-message {
  background-color: #0084ff;
  color: white;
  margin-left: auto;
  border-bottom-right-radius: 4px;
}
.ai-message {
  background-color: #f1f0f0;
  margin-right: auto;
  border-bottom-left-radius: 4px;
}
input {
  width: 100%;
  padding: 12px;
  margin-top: 10px;
  border: 1px solid #ddd;
  border-radius: 20px;
  outline: none;
}
</style>

vue实现简单对话

标签: 简单vue
分享给朋友:

相关文章

vue实现滑动

vue实现滑动

Vue 实现滑动效果 使用 CSS 过渡和动画 通过 Vue 的 transition 组件结合 CSS 过渡或动画实现滑动效果。适用于简单的元素入场/离场滑动。 <template>…

vue实现文档

vue实现文档

Vue 实现文档的方法 在 Vue 中实现文档功能可以通过多种方式,包括使用富文本编辑器、Markdown 解析或直接渲染 HTML。以下是几种常见的实现方法。 使用富文本编辑器 富文本编辑器如 T…

vue为啥能实现监听

vue为啥能实现监听

Vue 实现监听的原理 Vue 的监听能力主要基于其响应式系统,该系统通过数据劫持和依赖收集实现。当数据变化时,系统能自动触发视图更新或执行回调函数。 核心机制:Object.defineProp…

vue搜索过后实现分页

vue搜索过后实现分页

Vue 实现搜索后分页功能 数据绑定与搜索逻辑 在 Vue 组件中定义必要的数据属性: data() { return { searchQuery: '', currentPa…

vue怎么实现数据检测

vue怎么实现数据检测

Vue 数据检测的实现方式 Vue 通过响应式系统实现数据检测,核心机制基于 Object.defineProperty(Vue 2)或 Proxy(Vue 3)。以下是具体实现方法: 基于 Vue…

vue实现微博印象

vue实现微博印象

实现微博印象功能的核心思路 微博印象功能通常指用户发布微博后,系统自动分析文本内容并提取关键词或标签,以可视化形式展示。Vue实现该功能需要结合文本分析、关键词提取和前端渲染技术。 文本分析与关键…