• 在vue项目中使用markdown-it回显markdown文本


    前言

    其实有很多插件都是可以用来回显markdown文本的,这个插件也是其中之一。

    文档地址:markdown-it | markdown-it 中文文档

    这个文档在vue2和vue3里面都可以使用,所以还是比较推荐的

    使用

    安装
    npm install markdown-it --save
    应用
    1. <template>
    2. <div>
    3. <p v-html="renderMdText(markDownText)" class="mdTextBox">p>
    4. div>
    5. template>
    6. <script>
    7. import MarkdownIt from 'markdown-it'
    8. import 'highlight.js/styles/default.css'
    9. export default {
    10. name:'markdownTest',
    11. data(){
    12. return{
    13. //渲染的文本
    14. markDownText:"# 一号标题 \n\n ## 二号标题 \n\n ### 三号标题 \n\n 这是百度的链接 [https://www.baidu.com/](https://www.baidu.com/)\n\n ```javascript \n\n console.log('hello world') \n\n ``` \n\n 下面是一张图片 \n\n![风景图](https://img0.baidu.com/it/u=1090967238,1582698902&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500)",
    15. //初始化
    16. markdownRender:new MarkdownIt({
    17. html:true,
    18. linkify: true,
    19. typographer: true
    20. })
    21. }
    22. },
    23. methods:{
    24. renderMdText(text){
    25. //生成html
    26. return this.markdownRender.render(text)
    27. }
    28. }
    29. }
    30. script>
    31. <style lang="less" scoped>
    32. .mdTextBox{
    33. width: 1400px;
    34. }
    35. style>
    效果

    样式问题

    虽然内容是显示出来了,但是我们必须注意样式问题

    默认效果的清除

    在很多项目初始化创建的时候,许多默认样式会被清除,其实就会导致markdown-it渲染的html文档样式的缺失

    如图所示:标题,代码块,链接,文字行高等等应该有一些特定的样式和高亮,其实这都是因为一些项目把初始化的样式给去掉了,想要回显的比较好看一些,我们可以自己给定一些样式

     添加样式

    在vue中,切记用deep

    vue2语法为 /deep/ 选择器 {样式}

    vue3语法为 :deep(选择器) {样式}

    1. .mdTextBox{
    2. width: 1400px;
    3. /deep/ h1{
    4. font-size: 24px;
    5. line-height: 48px;
    6. font-weight: 800;
    7. }
    8. /deep/ h2{
    9. font-size: 22px;
    10. line-height: 42px;
    11. font-weight: 700;
    12. }
    13. /deep/ h3{
    14. font-size: 20px;
    15. line-height: 36px;
    16. font-weight: 600;
    17. }
    18. /deep/ img{
    19. width: 500px;
    20. }
    21. /deep/ a{
    22. color: #335fee;
    23. line-height: 20px;
    24. }
    25. /deep/ p {
    26. line-height: 20px;
    27. }
    28. }

    效果如下

    其他样式

    markdown文档中,其实还会有其他重要格式的样式,比如table,ul,ol等等的,需要保持原有的默认样式,同样的方法,用deep这些样式恢复

    插件

    当然了,常规的文本虽然能回显出来,但是还是有很多特殊结构的文本,我们就可以用到一些插件,在官方文档中有具体的说明,我这里就不过多写了,直接展示案例,方便看客老爷们cv

    代码
    1. <template>
    2. <div>
    3. <p v-html="renderMdText(markDownText)" class="mdTextBox">p>
    4. div>
    5. template>
    6. <script>
    7. import MarkdownIt from 'markdown-it'
    8. import MarkdownItAbbr from 'markdown-it-abbr'
    9. import MarkdownItAnchor from 'markdown-it-anchor'
    10. import MarkdownItFootnote from 'markdown-it-footnote'
    11. import MarkdownItHighlightjs from 'markdown-it-highlightjs'
    12. import MarkdownItSub from 'markdown-it-sub'
    13. import MarkdownItSup from 'markdown-it-sup'
    14. import MarkdownItTasklists from 'markdown-it-task-lists'
    15. import MarkdownItTOC from 'markdown-it-toc-done-right'
    16. import 'highlight.js/styles/default.css'
    17. export default {
    18. name:'markdownTest',
    19. data(){
    20. return{
    21. markDownText:"# 一号标题 \n\n ## 二号标题 \n\n ### 三号标题 \n\n 这是百度的链接 [https://www.baidu.com/](https://www.baidu.com/)\n\n ```javascript \n\n console.log('hello world') \n\n ``` \n\n 下面是一张图片 \n\n![风景图](https://img0.baidu.com/it/u=1090967238,1582698902&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500)",
    22. markdownRender:new MarkdownIt({
    23. html:true,
    24. linkify: true,
    25. typographer: true
    26. })
    27. .use(MarkdownItAbbr)
    28. .use(MarkdownItAnchor)
    29. .use(MarkdownItFootnote)
    30. .use(MarkdownItHighlightjs)
    31. .use(MarkdownItSub)
    32. .use(MarkdownItSup)
    33. .use(MarkdownItTasklists)
    34. .use(MarkdownItTOC)
    35. }
    36. },
    37. methods:{
    38. renderMdText(text){
    39. return this.markdownRender.render(text)
    40. }
    41. }
    42. }
    43. script>
    44. <style lang="less" scoped>
    45. .mdTextBox{
    46. width: 1400px;
    47. /deep/ h1{
    48. font-size: 24px;
    49. line-height: 48px;
    50. font-weight: 800;
    51. }
    52. /deep/ h2{
    53. font-size: 22px;
    54. line-height: 42px;
    55. font-weight: 700;
    56. }
    57. /deep/ h3{
    58. font-size: 20px;
    59. line-height: 36px;
    60. font-weight: 600;
    61. }
    62. /deep/ img{
    63. width: 500px;
    64. }
    65. /deep/ a{
    66. color: #335fee;
    67. line-height: 20px;
    68. }
    69. /deep/ p {
    70. line-height: 20px;
    71. }
    72. }
    73. style>
    效果

  • 相关阅读:
    设计模式(四)设计原则part1
    Day06:运算符详解
    计算机毕业设计ssm社区疫情防控管理系统rgb2a系统+程序+源码+lw+远程部署
    SwiftUI 动态岛开发教程之 04 如何设计动态岛Dynamic Island 的现场活动 Live Activity
    面试公司ETL工程师(实习生)——笔试面试题(SQL)
    多视图聚类的论文阅读(一)
    掌握React中的useEffect:函数组件中的魔法钩子
    新同事写了几段小代码,把系统给搞崩了,被老板爆怼一顿!
    深度学习入门(十一)权重衰减
    ant.design 的 Pro Component 的 ProTable 清除表单内容的方法
  • 原文地址:https://blog.csdn.net/m0_54741495/article/details/139470619