当前位置:首页 > 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 中实现建模通常涉及数据绑定、组件化和状态管理。以下是几种常见的方法: 数据驱动建模 Vue 的核心是数据驱动视图。通过定义数据模型,Vue 会自动更新 DOM。例…

vue实现双向

vue实现双向

Vue 实现双向绑定的方法 Vue 的双向绑定主要通过 v-model 指令实现,它结合了数据绑定和事件监听,适用于表单元素(如 input、select、textarea 等)。以下是几种常见的实现…

vue删除实现

vue删除实现

Vue 删除功能的实现方法 在 Vue 中实现删除功能通常涉及以下几个步骤: 方法一:使用数组的 splice 方法 通过索引删除数组中的元素,适用于列表渲染的场景。 methods: {…

vue实现vmodel

vue实现vmodel

Vue 实现 v-model Vue 的 v-model 是一个语法糖,用于在表单元素或组件上实现双向数据绑定。以下是其实现方式和原理的详细说明。 在表单元素上使用 v-model v-model…

vue实现特效轮播

vue实现特效轮播

Vue实现特效轮播的方法 使用Vue实现轮播效果可以通过多种方式完成,以下是几种常见的实现方法。 使用Vue和CSS动画 通过Vue的动态绑定和CSS动画结合,可以实现平滑的轮播效果。 <t…

vue 分页的实现

vue 分页的实现

Vue 分页的实现方法 使用 Element UI 的分页组件 安装 Element UI: npm install element-ui 在 Vue 项目中引入 Element UI 的分页组件:…