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

完整组件示例

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

vue实现简单对话

<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 的路由配置可以天然转化为菜单结构,适合权限与路由绑定的系统: // router/index.js const route…

vue实现钟表

vue实现钟表

使用 Vue 实现动态钟表 以下是一个基于 Vue 3 的动态钟表实现方案,包含时分秒指针和数字时间显示。 模板部分 <template> <div class="cloc…

vue实现portal

vue实现portal

Vue 实现 Portal 功能 Portal 是一种将子节点渲染到父组件 DOM 层级之外的 DOM 节点的技术,常用于实现模态框、弹出层等需要脱离当前组件层级的场景。Vue 可以通过多种方式实现…

vue实现影院

vue实现影院

Vue实现影院功能的基本思路 使用Vue框架开发影院功能需要结合前端组件化开发、状态管理以及后端API交互。以下是关键实现步骤: 影院页面布局设计 影院页面通常分为顶部导航栏、影院列表区域和底部导航…

vue实现路径

vue实现路径

Vue 实现路径的方法 在 Vue 中实现路径管理通常涉及 Vue Router 的使用,以下是一些常见的实现方法: 安装 Vue Router 通过 npm 或 yarn 安装 Vue Route…

vue实现通讯

vue实现通讯

Vue 组件通讯方法 父子组件通讯 父组件向子组件传递数据通过 props,子组件向父组件传递数据通过 $emit 事件。 父组件模板: <child-component :message=…