uni-app 建议md语法支持TOC自动生成文档目录结构

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

uni-app 建议md语法支持TOC自动生成文档目录结构

建议 markdown 可以支持TOC自动生成结构目录的语法

4 回复

markdown是有大纲的,底部状态栏中左侧的按钮可以打开文档结构树

在uni-app项目中,虽然原生并不直接支持Markdown(MD)语法自动生成文档目录结构(TOC),但我们可以通过一些方法实现这一功能。一个常见的方法是在前端通过JavaScript解析Markdown内容,并自动生成目录。以下是一个基于uni-app的简单实现示例,它展示了如何加载Markdown文件、解析其内容并生成目录。

首先,确保你的uni-app项目中安装了marked库,这是一个流行的Markdown解析器。你可以通过npm或yarn安装它:

npm install marked --save

接下来,在你的uni-app项目中创建一个页面,比如MarkdownViewer.vue,用于显示Markdown内容和生成的目录。

<template>
  <view>
    <view class="toc">
      <view v-for="(item, index) in tocItems" :key="index">
        <navigator :url="'#' + item.id">{{ item.text }}</navigator>
      </view>
    </view>
    <view class="content" v-html="markdownContent"></view>
  </view>
</template>

<script>
import marked from 'marked';
import hljs from 'highlight.js'; // 可选,用于代码高亮
import 'highlight.js/styles/github.css'; // 可选,选择一种高亮样式

marked.setOptions({
  highlight: function(code, lang) {
    const validLanguage = hljs.getLanguage(lang) ? lang : 'plaintext';
    return hljs.highlight(validLanguage, code).value;
  }
});

export default {
  data() {
    return {
      markdownContent: '',
      tocItems: []
    };
  },
  mounted() {
    this.loadMarkdown('path/to/your/markdown/file.md');
  },
  methods: {
    loadMarkdown(filePath) {
      uni.request({
        url: filePath,
        success: (res) => {
          const rawMarkdown = res.data;
          const parser = new marked.Parser();
          const lexer = new marked.Lexer();
          const tokens = lexer.lex(rawMarkdown);
          const tocTokens = parser.inlineTokens(tokens.slice(0, tokens.findIndex(t => t.type === 'heading')));
          this.tocItems = this.generateToc(tocTokens);
          this.markdownContent = marked(rawMarkdown);
        }
      });
    },
    generateToc(tokens) {
      return tokens
        .filter(t => t.type === 'heading')
        .map((t, index) => ({
          id: `heading-${index + 1}`,
          text: t.text
        }));
    }
  }
};
</script>

<style>
/* 添加你的样式 */
</style>

在这个示例中,loadMarkdown方法通过uni-app的uni.request方法加载Markdown文件,然后使用marked解析Markdown内容。generateToc方法从解析的tokens中提取标题信息,生成目录项。注意,这里为了简化,目录项的ID是简单递增的,你可以根据需要调整生成逻辑。

请确保你的Markdown文件路径正确,并且服务器允许跨域请求(如果是从远程服务器加载Markdown文件)。这个示例展示了如何在uni-app中实现基本的Markdown解析和目录生成功能,你可以根据需求进一步扩展和优化。

回到顶部