Skip to content

BubbleList 对话列表 ​

用于承载 Bubble 组件的列表。

介绍 ​

BubbleList 组件常用于对话界面的列表。

基础用法 ​

Mock User content! Mock User content! Mock User content! Mock User content! Mock User content! Mock User content! Mock User content! Mock User content!
M
基础用法
BubbleList 组件的基础用法
<template>
  <div style="margin-bottom: 30px;">
    <el-button @click="handleClick" type="primary">添加AI消息</el-button>
    <el-button @click="handleTop">滚动到顶部</el-button>
  </div>
  <BubbleList ref="bubbleListRef" :items="items" style="height: 200px;overflow: auto;" />
</template>

<script setup lang="ts">
import { BubbleList } from 'vue-chat-pro'
import { reactive, ref } from 'vue';
import type { BubbleDataType } from 'vue-chat-pro/types'
const items = reactive<BubbleDataType[]>([
  {
    role: 'user',
    content: 'Mock User content! Mock User content! Mock User content! Mock User content! Mock User content! Mock User content! Mock User content! Mock User content! ',
    headerProps: 'user头部',
    key: 'perset_user_1',
  },
  {
    role: 'ai',
    content: 'Mock Ai content! Mock Ai content! Mock Ai content! ',
    headerProps: 'ai头部',
    placement: 'start',
    avatar: 'https://mdn.alipayobjects.com/huamei_iwk9zp/afts/img/A*s5sNRo5LjfQAAAAAAAAAAAAADgCCAQ/fmt.webp',
    typing: { step: 5, interval: 20 },
    key: 'perset_ai_1',
  },
])

const bubbleListRef = ref<InstanceType<typeof BubbleList>>()
const handleClick = () => {
  items.push({
    role: 'ai',
    content: 'Mock Ai content! Mock Ai content! Mock Ai content! Mock Ai content! Mock Ai content! Mock Ai content! Mock Ai content! Mock Ai content! ',
    headerProps: 'ai头部',
    placement: 'start',
    avatar: 'https://mdn.alipayobjects.com/huamei_iwk9zp/afts/img/A*s5sNRo5LjfQAAAAAAAAAAAAADgCCAQ/fmt.webp',
    typing: { step: 5, interval: 20 },
    key: 'perset_ai_' + (items.length + 1),
  })
}
const handleTop = () => {
  bubbleListRef.value?.scrollTo({
    key: 0,
    block: 'nearest',
  })
}
</script>

<style scoped lang="scss"></style>

自定义对话列表 ​

通过调整items加载定制,调整气泡效果。

Mock User content! Mock User content! Mock User content! Mock User content! Mock User content! Mock User content! Mock User content! Mock User content!
Custom loading...
自定义对话列表
BubbleList 组件的自定义对话列表
<template>
  <BubbleList ref="bubbleListRef" :items="items" style="height: 200px;overflow: auto;">
  </BubbleList>
</template>

<script setup lang="ts">
import { BubbleList } from 'vue-chat-pro'
import { reactive, ref, h } from 'vue';
import type { BubbleDataType } from 'vue-chat-pro/types'
const items = reactive<BubbleDataType[]>([
  {
    role: 'user',
    content: 'Mock User content! Mock User content! Mock User content! Mock User content! Mock User content! Mock User content! Mock User content! Mock User content! ',
    headerProps: 'user头部',
    key: 'perset_user_1',
  },
  {
    role: 'ai',
    content: 'Mock Ai content! Mock Ai content! Mock Ai content! ',
    headerProps: 'ai头部',
    placement: 'start',
    avatar: 'https://mdn.alipayobjects.com/huamei_iwk9zp/afts/img/A*s5sNRo5LjfQAAAAAAAAAAAAADgCCAQ/fmt.webp',
    typing: { step: 5, interval: 20 },
    loadingRender: () => h('div', { style: { color: 'red' } }, 'Custom loading...'),
    key: 'perset_ai_1',
    loading: true,
  },
])

const bubbleListRef = ref<InstanceType<typeof BubbleList>>()
</script>

<style scoped lang="scss"></style>

BubbleList Attributes ​

属性说明类型默认值required
autoScroll当内容更新时,自动滚动到最新位置。booleantrue
itemsBubble 数据列表(BubbleProps & { key: string | number, role?: string })[]-true

BubbleList Slots ​

插槽名说明类型
avatar头像-
header头部面板-
footer底部内容-
loadingloading 占位-
content内容-