使用vue.3.2.0实现一个聊天对话框
时间: 2023-07-20 13:42:37 浏览: 253
聊天对话框
好的,下面我将介绍如何使用 Vue 3.2.0 实现一个简单的聊天对话框。
1. 准备工作
首先,我们需要在项目中安装 Vue 3.2.0 和一个 UI 组件库,这里我以 Element Plus 为例。你可以通过以下命令来安装它们:
```
npm install vue@3.2.0
npm install element-plus
```
2. 创建组件
我们先创建一个 ChatMessage 组件来显示聊天消息。在 `src/components` 目录下创建一个名为 `ChatMessage.vue` 的文件,代码如下:
```vue
<template>
<div class="chat-message" :class="{ 'is-sent': isSent }">
<div class="avatar">
<img :src="avatar" alt="avatar">
</div>
<div class="content">
<div class="name">{{ name }}</div>
<div class="text">{{ text }}</div>
</div>
</div>
</template>
<script>
export default {
props: {
avatar: String,
name: String,
text: String,
isSent: Boolean
}
}
</script>
<style scoped>
.chat-message {
display: flex;
margin-bottom: 16px;
}
.avatar {
margin-right: 16px;
}
.content {
flex: 1;
display: flex;
flex-direction: column;
}
.name {
font-size: 14px;
color: #999;
}
.text {
margin-top: 8px;
font-size: 16px;
}
.is-sent .avatar {
margin-left: 16px;
margin-right: 0;
}
.is-sent .content {
text-align: right;
}
</style>
```
这个组件接受四个 props:
- `avatar`:头像图片的 URL。
- `name`:发送者的名字。
- `text`:消息文本。
- `isSent`:是否是发送的消息。
我们使用 CSS Flexbox 布局来排列头像、名字和消息文本。
接下来,我们创建一个 Chat 组件来显示整个聊天对话框。在 `src/components` 目录下创建一个名为 `Chat.vue` 的文件,代码如下:
```vue
<template>
<div class="chat">
<div class="messages">
<chat-message
v-for="(message, index) in messages"
:key="index"
:avatar="message.avatar"
:name="message.name"
:text="message.text"
:isSent="message.isSent"
></chat-message>
</div>
<div class="input">
<el-input
v-model="inputText"
placeholder="请输入消息"
@keydown.enter="sendMessage"
>
<el-button slot="append" @click="sendMessage">发送</el-button>
</el-input>
</div>
</div>
</template>
<script>
import ChatMessage from './ChatMessage.vue'
export default {
components: {
ChatMessage
},
data() {
return {
messages: [],
inputText: ''
}
},
methods: {
sendMessage() {
if (!this.inputText) {
return
}
this.messages.push({
avatar: 'https://i.pravatar.cc/80',
name: 'Jack',
text: this.inputText,
isSent: true
})
this.inputText = ''
}
}
}
</script>
<style scoped>
.chat {
max-width: 800px;
margin: 0 auto;
}
.messages {
margin-bottom: 16px;
}
.input {
display: flex;
align-items: center;
}
</style>
```
这个组件包含两个子组件:
- `ChatMessage`:用来显示聊天消息。
- `el-input`:用来输入和发送消息。
我们使用了 Element Plus 的 `el-input` 和 `el-button` 组件,同时监听了 `keydown.enter` 事件和按钮的 `click` 事件来发送消息。
在 `data` 中,我们定义了两个变量:
- `messages`:存储所有的聊天消息。
- `inputText`:存储当前输入框的文本。
在 `sendMessage` 方法中,我们首先判断输入框是否为空,如果是,则直接返回。否则,将当前消息添加到 `messages` 数组中,并清空输入框。
3. 使用 Chat 组件
最后,在 App.vue 中使用 Chat 组件来显示聊天对话框。代码如下:
```vue
<template>
<div id="app">
<Chat />
</div>
</template>
<script>
import Chat from './components/Chat.vue'
export default {
name: 'App',
components: {
Chat
}
}
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
}
</style>
```
现在,你可以在浏览器中运行这个应用程序,并测试它的功能了。
阅读全文