当前位置:首页 > 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>

消息发送逻辑

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

vue实现简单对话

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回复,展示异步交互效果:

vue实现简单对话

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 Router 使用 npm 或 yarn 安装 Vue Router 依赖包: npm install vue-router # 或 yarn add vue-…

vue实现皮肤切换

vue实现皮肤切换

实现皮肤切换的基本思路 在Vue中实现皮肤切换功能,通常涉及动态修改CSS变量或类名。核心是通过状态管理当前主题,并在组件中应用对应的样式。 使用CSS变量实现主题切换 CSS变量(自定义属性)是实…

vue实现iframe

vue实现iframe

Vue 中实现 iframe 的方法 在 Vue 项目中,可以通过多种方式实现 iframe 的嵌入。以下是几种常见的方法: 使用原生 HTML iframe 标签 直接在 Vue 组件的模板中使用…

ssh vue 实现

ssh vue 实现

使用SSH连接Vue项目部署的服务器 在Vue项目开发或部署过程中,可能需要通过SSH连接到远程服务器进行配置或维护。以下是实现SSH连接并部署Vue项目的关键步骤: 生成SSH密钥对 在本地终端…

vue 实现直播

vue 实现直播

Vue 实现直播的基本方法 在Vue中实现直播功能,通常需要结合WebRTC、RTMP或HLS等技术。以下是几种常见的实现方式: 使用WebRTC实现实时直播 WebRTC适合低延迟的实时直播场景…

vue实现机制

vue实现机制

Vue 实现机制的核心原理 Vue.js 的核心实现机制主要基于响应式系统、虚拟 DOM 和组件化设计。以下是关键实现细节: 响应式系统 Vue 通过 Object.defineProperty(…