AI问答系统前端搭建:基于ant-design-x-vue如何实现渲染echart图表的同时保留打字机特效
将原本要渲染图表的地方先用一个空div占着空间,等到完整的innerhtml渲染完后,再根据标记的空div渲染图表或者自定义组件(web component)如果不使用ant-design-x自己实现一个的话,可以考虑分段渲染,就不需要延迟到结束才渲染。1.使用ssr等方式提前将图表渲染出来,用图片或者svg的形式直接返回原生dom字符串。当我们需要在里面渲染一个自定义vue组件时,提供了一个回调
当我们要实现一个PC端AI问答系统时,使用ant-design-x-vue组件库可以快速帮我们搭建起页面和实现一些基本功能:Bubble 对话气泡 | Ant Design X Vue

当我们需要在里面渲染一个自定义vue组件时,提供了一个回调函数钩子

但此时组件提供的打字机效果是没有的了,原因就是打字机效果实现的原理无非就是不断重复得渲染innerhtml这个字符串,而我们的自定义vue组件很难变成原生的html文本

messageRender: (content) => {
console.log(content)
return (
<div
class="md-render"
style={{ textAlign: 'left' }}
v-html={md.render(content)}
onClick={clickUrl.bind(null, id)}
></div>
)}
下面来讲讲渲染图表的同时保留打字机效果:
1.使用ssr等方式提前将图表渲染出来,用图片或者svg的形式直接返回原生dom字符串

2.延迟渲染:
将原本要渲染图表的地方先用一个空div占着空间,等到完整的innerhtml渲染完后,再根据标记的空div渲染图表或者自定义组件(web component)
onTypingComplete: () => {
setTimeout(() => {
finishInputRenderChart()
}, 0)
}
function finishInputRenderChart() {
echartRenderArr.value
.filter((val) => val.type == 'echart')
.forEach((val) => {
const foundElement = document.getElementById(`${val.key}`)
if (foundElement) {
if (!val.echartInstance) {
val.echartInstance = echarts.init(foundElement)
}
console.log('val.content', val.content, val.echartInstance)
val.echartInstance.setOption(val.content)
}
})
}
如果不使用ant-design-x自己实现一个的话,可以考虑分段渲染,就不需要延迟到结束才渲染
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)