vue实现微博话题
Vue 实现微博话题功能
微博话题通常包含话题标签的识别、高亮显示、点击跳转等功能。以下是基于 Vue 的实现方案:
数据绑定与模板渲染
使用 Vue 的模板语法和指令动态渲染内容,通过正则表达式识别话题标签(如 #话题#):
<template>
<div class="weibo-content">
<p v-html="formatTopic(content)"></p>
</div>
</template>
话题识别与高亮
通过方法处理文本,将话题转换为可点击的链接:

methods: {
formatTopic(text) {
const regex = /#([^#]+)#/g;
return text.replace(regex, '<a href="/topic/$1" class="topic-tag">#$1#</a>');
}
}
CSS 样式可自定义话题标签的高亮效果:
.topic-tag {
color: #ff8200;
text-decoration: none;
}
.topic-tag:hover {
text-decoration: underline;
}
路由跳转处理
结合 Vue Router 实现话题点击跳转:

import { useRouter } from 'vue-router';
const router = useRouter();
function handleTopicClick(topicName) {
router.push(`/topic/${encodeURIComponent(topicName)}`);
}
输入框实时识别
在发布微博的输入框中实现话题实时识别:
<textarea
v-model="inputText"
@input="highlightTopics"
ref="textarea"
></textarea>
<div class="preview" v-html="previewContent"></div>
后端交互
提交话题数据到后端时处理话题标签:
async submitPost() {
const topics = this.inputText.match(/#([^#]+)#/g) || [];
const response = await axios.post('/api/posts', {
content: this.inputText,
topics: topics.map(t => t.replace(/#/g, ''))
});
}
注意事项
- 使用
v-html时注意 XSS 防护,可引入 DOMPurify 等库进行过滤 - 移动端需考虑触摸反馈和长按操作
- 话题搜索建议可结合防抖(debounce)优化性能
- 对于大量话题渲染,考虑虚拟滚动优化
扩展功能
- 实现话题自动补全
- 添加话题热度显示
- 支持话题订阅功能
- 实现话题关联推荐






