markdown uni-app 使用技巧分享

发布于 1周前 作者 caililin 来自 Uni-App

markdown uni-app 使用技巧分享

制作的页面,需要直接显示markdown文档,有这种插件么?

开发环境 版本号 项目创建方式
uni-app
1 回复

Markdown 在 Uni-App 中的使用技巧分享

在 Uni-App 开发中,虽然原生并不直接支持 Markdown 语法解析与渲染,但我们可以通过一些技巧和方法来实现 Markdown 内容在 Uni-App 中的展示。以下是一些实用的代码案例,展示如何在 Uni-App 中集成和使用 Markdown。

1. 使用第三方库解析 Markdown

我们可以利用一些开源的 Markdown 解析库,比如 markedmarkdown-it,将 Markdown 文本转换为 HTML,然后在 Uni-App 中通过 web-view 组件或 rich-text 组件进行渲染。

步骤

  1. 安装 Markdown 解析库: 在 HBuilderX 中,可以通过 npm 安装 markdown-it

    npm install markdown-it --save
    
  2. 创建 Markdown 解析服务: 在 Uni-App 项目中创建一个云函数或后端服务,用于将 Markdown 转换为 HTML。

    // cloudfunctions/markdown/index.js
    const cloud = require('wx-server-sdk');
    const MarkdownIt = require('markdown-it');
    
    cloud.init();
    
    exports.main = async (event, context) => {
      const md = new MarkdownIt();
      const html = md.render(event.markdownText);
      return {
        html
      };
    };
    
  3. 在前端调用解析服务并渲染

    // pages/index/index.vue
    <template>
      <view>
        <web-view :src="markdownUrl"></web-view>
      </view>
    </template>
    
    <script>
    export default {
      data() {
        return {
          markdownUrl: ''
        };
      },
      mounted() {
        this.renderMarkdown('# Hello, Markdown!');
      },
      methods: {
        async renderMarkdown(markdownText) {
          try {
            const res = await uni.cloud.callFunction({
              name: 'markdown',
              data: {
                markdownText
              }
            });
            const html = `<html><body>${res.result.html}</body></html>`;
            const blob = new Blob([html], { type: 'text/html' });
            this.markdownUrl = URL.createObjectURL(blob);
          } catch (error) {
            console.error(error);
          }
        }
      }
    };
    </script>
    

2. 使用 rich-text 组件(有限支持)

对于简单的 Markdown 语法,如标题、段落、列表等,可以直接转换为 rich-text 组件支持的节点格式。但这种方法不支持复杂的 Markdown 语法,如表格、代码块等。

示例

// 将简单的 Markdown 转换为 rich-text 节点
const markdownText = '# Title\n\nThis is a paragraph.';
const richTextNodes = [
  {
    name: 'heading',
    attrs: {
      level: 1
    },
    children: [
      {
        type: 'text',
        text: 'Title'
      }
    ]
  },
  {
    name: 'paragraph',
    children: [
      {
        type: 'text',
        text: 'This is a paragraph.'
      }
    ]
  }
];

然后,在模板中使用 rich-text 组件渲染这些节点。

虽然 Markdown 在 Uni-App 中的原生支持有限,但通过结合第三方库和云函数服务,我们可以实现 Markdown 内容的解析与渲染,从而丰富应用的文本展示能力。

回到顶部