zoukankan      html  css  js  c++  java
  • 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>
    
    如果觉得文章对您有帮助,希望您能 关注+推荐 哦
  • 相关阅读:
    Kotlin 基础
    ViewPager2
    8086-debug指令
    (四)主控板改IP,升级app,boot,mac
    (三)主控板生级uboot与内核
    (四)linux网络编程
    (七)嵌入式系统异常程序远程定位
    (六)ARM状态寄存器-PSR
    (五)stm32工程代码HardFault异常查错调试方法
    (十)makefile
  • 原文地址:https://www.cnblogs.com/xiaqiuchu/p/15168630.html
Copyright © 2011-2022 走看看