uniapp markdown最佳渲染方案

使用rich-text、uparse、v-html进行解析时,发现很多格式都不能展示

rich-text

带有表格的页面展示如图

uparse

带有表格的页面展示如图

v-html

带有表格的页面展示如图

 

towxml

带有表格的页面展示如图

 Towxml 是一个可将HTMLMarkdown转为微信小程序WXML(WeiXin Markup Language)的渲染库。用于解决在微信小程序中MarkdownHTML不能直接渲染的问题。

Towxml

官方文档

uniapp 使用流程

  1. 新建个空目录,git clone https://github.com/sbfkcel/towxml.git
  2. 在下载的文件目录下安装所需依赖 npm install
  3. 构建项目 npm run build
  4. 修改dist文件夹下decode.json为下截图,图一
  5. 将修改过的dist文件夹复制到uniapp工程的static目录下,并修改名字为towxml,图二

 图一

 图二

该文件有300多KB,可以根据自己的需求删留来腾空间。 接下来就可以在组件中引入使用

<template>
	<view>
		<towxml :nodes="productInfoItemContent"/>
	</view>
</template>
<script>
	import towxml from '@/static/towxml/towxml'
	
	export default {
		components: {
			towxml
		},
		data() {
			return {
  			  	towxmlFunc:require('@/static/towxml/index.js'),
				productInfoItemContent:'',
			};
		},
		onLoad(options) {
		    let str =  uni.getStorageSync('itemDetail ')
		    this.itemDetail = JSON.parse(str)
		    this.productInfoItemContent = this.towxmlFunc(this.productInfoItemContent,'markdown')
	    },
	}
...

### UniApp 渲染不显示问题的解决方案 #### v-for 列表渲染不执行方法的问题 当遇到 `v-for` 列表渲染无法正常工作的情况时,一个重要原因是 UniApp 对被循环数组的操作有严格限制。具体来说,在当前版本中,UniApp 不允许对正在遍历的数组进行任何操作[^1]。因此,如果尝试将一个函数的返回值作为迭代对象,则可能导致渲染失败。 为了绕过这一限制并实现预期的功能,建议采用如下策略: - **提前处理数据**:在模板外预先计算好要使用的数据集合,再将其传递给组件内的 `v-for` 进行渲染。 ```javascript export default { data() { return { processedItems: [] // 预先准备好的项列表 }; }, created() { this.processedItems = someFunctionToProcessData(); // 调用外部逻辑来填充processedItems } }; ``` - **使用 computed 属性**:通过 Vue 的计算属性机制动态生成最终的数据集,从而避免直接在模板内调用复杂的方法。 ```javascript export default { data() { return { rawItems: [...] // 原始未加工的数据 }; }, computed: { itemsToShow() { return this.rawItems.map(item => transformItem(item)); // 返回转换后的结果供视图层消费 } } }; ``` #### 图片加载与路径配置不当引发的显示异常 对于图片资源未能按期望呈现的情形,通常是因为相对路径和绝对路径设置错误所致。特别是在跨平台环境下开发的小程序应用里,不同平台间存在细微差别,需特别留意文件引用方式的选择[^2]。 针对此情况的有效措施包括但不限于: - **统一使用静态资源管理工具**:借助 Webpack 或 Vite 等现代前端构建工具链中的 asset modules 功能自动处理媒体文件的位置映射; - **遵循官方推荐的最佳实践指南**:参照 [uni-app 官方文档](https://uniapp.dcloud.io/) 中关于如何正确指定本地或远程图像链接的具体说明实施调整; ```html <!-- 正确的做法 --> <image src="@/static/images/logo.png"></image> ``` > 注意:上述例子假设项目根目录下有一个名为 `static` 文件夹用来存放公共资源,并且已经按照约定俗成的方式进行了相应的 webpack alias 设置。 #### Markdown 内容解析及可视化难题 最后,考虑到某些场景下开发者希望能在页面上直观地展现由 MarkDown 编写的富文本内容却遭遇障碍的现象,可以考虑引入专门为此设计的支持库——比如 Towxml 来辅助完成这项任务[^3]。 安装步骤如下所示: 1. 创建一个新的空白文件夹用于克隆仓库; ```bash mkdir towxml && cd $_ git clone https://github.com/sbfkcel/towxml.git . ``` 2. 执行必要的包依赖初始化命令; ```bash npm install ``` 3. 构建项目并将产物集成至现有工程之中; ```bash npm run build cp -r dist /path/to/your/project/static/towxml/ ``` 4. 修改解码配置文件以适应特定需求(如有必要); 5. 在目标页面导入插件并注册全局过滤器以便后续调用; ```javascript import * as towxml from '@/static/towxml/index.js'; Vue.filter('md', function (value) { if (!value) return ''; const result = towxml.html(value); return result; }); ``` 6. 应用自定义滤镜于实际业务代码片段当中; ```vue <template> <div v-html="content | md"></div> </template> <script> export default { data () { return { content: '# Hello, world!' } } } </script> ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值