vue实现简单对话
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>






