• AngularJs 12 使用 Editor.md 实现 Markdown 编辑器 并实现前端渲染,并解决 marked is not defined 报错的问题


    参考

    1. Markdown转HTML的显示处理之自定义 ToC 容器
    2. vue使用marked解析markdown文本遇到的坑及解决方法

    遇到的问题

    接前两篇文章《AngularJs 12 使用 Editor.md 实现 Markdown 编辑器(修改版)》,《AngularJs 12 使用 Editor.md 并拆分为组件,解决 editormd.setValue 不存在的bug》完美实现后端编辑器的设置编辑器的value以及获取markdown之后,要做前台渲染markdown。

    但是怎么都不能正确渲染,通过查看《vue使用marked解析markdown文本遇到的坑及解决方法》这篇文章才得以解决。

    代码

    1. angular.json 引入所有需要的js
            "build": {
              "builder": "@angular-devkit/build-angular:browser",
              "options": {
                "outputPath": "dist/my-blog",
                "index": "src/index.html",
                "main": "src/main.ts",
                "polyfills": "src/polyfills.ts",
                "tsConfig": "tsconfig.app.json",
                "inlineStyleLanguage": "scss",
                "assets": [
                  "src/favicon.ico",
                  "src/assets"
                ],
                "styles": [
                  "src/styles.scss",
                  "./src/assets/editormd/css/editormd.css"
                ],
                "scripts": [
                  "node_modules/jquery/dist/jquery.js",
                  "src/assets/editormd/lib/zepto.min.js",
                  "src/assets/editormd/lib/marked.min.js",
                  "src/assets/editormd/lib/prettify.min.js",
                  "src/assets/editormd/lib/raphael.min.js",
                  "src/assets/editormd/lib/underscore.min.js",
                  "src/assets/editormd/lib/sequence-diagram.min.js",
                  "src/assets/editormd/lib/flowchart.min.js",
                  "src/assets/editormd/lib/jquery.flowchart.min.js",
                  "src/assets/editormd/editormd.min.js"
                ]
              },
              "configurations": {
                "production": {
                  "budgets": [
                    {
                      "type": "initial",
                      "maximumWarning": "500kb",
                      "maximumError": "1mb"
                    },
                    {
                      "type": "anyComponentStyle",
                      "maximumWarning": "2kb",
                      "maximumError": "4kb"
                    }
                  ],
                  "fileReplacements": [
                    {
                      "replace": "src/environments/environment.ts",
                      "with": "src/environments/environment.prod.ts"
                    }
                  ],
                  "outputHashing": "all"
                },
                "development": {
                  "buildOptimizer": false,
                  "optimization": false,
                  "vendorChunk": true,
                  "extractLicenses": false,
                  "sourceMap": true,
                  "namedChunks": true
                }
              },
              "defaultConfiguration": "production"
            },
    
    1. 组件js代码 home-article-info/home-article-info.component.ts
    import { Component, OnInit } from '@angular/core';
    import { HomeArticleService } from '../../../services/home-article.service';
    import { Router, ActivatedRoute } from '@angular/router'; //导入router服务
    import { ArticleType } from '../../../types/article-type';
    import { topFunction } from '../../../../plugin/function';
    
    declare var $: any;
    declare var editormd: any;
    
    @Component({
      selector: 'app-home-article-info',
      templateUrl: './home-article-info.component.html',
      styleUrls: ['./home-article-info.component.scss']
    })
    export class HomeArticleInfoComponent implements OnInit {
    
      public editormd: any;
    
      public article?: ArticleType;
    
      constructor(protected router: Router, private activatedRoute: ActivatedRoute, protected homeArticleService: HomeArticleService) { }
    
      ngOnInit() {
        // 二级页面有可能不在顶部,这里返回顶部一下
        topFunction();
        // 获取数据
        this.onGetArticle();
      }
      /**
       * 加载markdown
       */
      onLoadMarkdown(markdown: string) {
        this.editormd = editormd.markdownToHTML("editormd", {
          markdown        : markdown ,//+ "
    " + $("#append-test").text(),
          //htmlDecode      : true,       // 开启 HTML 标签解析,为了安全性,默认不开启
          htmlDecode      : "style,script,iframe",  // you can filter tags decode
          //toc             : false,
          tocm            : true,    // Using [TOCM]
          //tocContainer    : "#custom-toc-container", // 自定义 ToC 容器层
          //gfm             : false,
          //tocDropdown     : true,
          // markdownSourceCode : true, // 是否保留 Markdown 源码,即是否删除保存源码的 Textarea 标签
          emoji           : true,
          taskList        : true,
          tex             : true,  // 默认不解析
          flowChart       : true,  // 默认不解析
          sequenceDiagram : true,  // 默认不解析
      });
      }
      /**
       * 获取文章列表
       */
      onGetArticle() {
        const id = Number(this.activatedRoute.snapshot.paramMap.get('id'));
        this.homeArticleService.getArticle(id).then(res => {
          this.article = res.data;
          this.onLoadMarkdown(this.article.content);
        });
      }
    
    }
    
    1. 组件html代码home-article-info/home-article-info.component.ts
    <div class="app-home-article-info">
      <div class="article-info-container">
          <div class="title">
            {{article && article.title}}
          </div>
          <ul class="miscellaneous">
            <li> {{article && article.created_at}}</li>
            <li>by&nbsp;胡思乱想</li>
          </ul>
          <div id="editormd">
         </div>
      </div>
    </div>
    
    如果觉得文章对您有帮助,希望您能 关注+推荐 哦
  • 相关阅读:
    FragmentTabHost实现标签卡效果
    TabLayout+ViewPager实现标签卡效果
    NavigationView的使用
    大数据怎么学习,在学习大数据之前,需要具备什么基础?
    为什么学习大数据,大数据科学家写给大数据学习者的坚定理由
    一步一步学习大数据:Hadoop 生态系统与场景
    0基础学习大数据你需要了解的学习路线和方向
    大数据的入门级学习(全套)
    大数据学习系列之—HBASE
    为什么这么多人学习大数据?新手该如何上手大数据?
  • 原文地址:https://www.cnblogs.com/xiaqiuchu/p/15168630.html
Copyright © 2020-2023  润新知