首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Angular中动态渲染一个markdown文件?

如何在Angular中动态渲染一个markdown文件?
EN

Stack Overflow用户
提问于 2019-06-04 06:40:52
回答 2查看 9.9K关注 0票数 11

我正在尝试编写一个Angular组件,它使用ngx-markdown库将markdown文件呈现为网页的一部分。看一下这个库的官方演示,它有一个requires的文件列表,然后从这些文件中渲染:

来自演示的app.component.ts

代码语言:javascript
复制
  blockquotes = require('raw-loader!./markdown/blockquotes.md');
  codeAndSynthaxHighlighting = require('raw-loader!./markdown/code-and-synthax-highlighting.md');
  emphasis = require('raw-loader!./markdown/emphasis.md');
  headers = require('raw-loader!./markdown/headers.md');
  horizontalRule = require('raw-loader!./markdown/horizontal-rule.md');
  images = require('raw-loader!./markdown/images.md');
  links = require('raw-loader!./markdown/links.md');
  lists = require('raw-loader!./markdown/lists.md');
  listsDot = require('raw-loader!./markdown/lists-dot.md');
  tables = require('raw-loader!./markdown/tables.md');

来自演示的app.component.html

代码语言:javascript
复制
<!-- HEADER -->
<section id="headers">
<h2 class="subtitle">Headers</h2>

<pre>{{ headers }}</pre>

<markdown>{{ headers }}</markdown>
</section>

还有其他部分可以从其他require中读取,但语法是相同的。

我正在尝试做的是有一个方法来改变<markdown>标记从哪个文件读取。这是我到目前为止所知道的:

代码语言:javascript
复制
  // Markdown variable.
  markdown;

  ngOnInit() {
    this.setMarkdown('home.md');
  }

  setMarkdown(file: string) {
    const path = 'raw-loader!./assets/markdown/' + file;
    this.markdown = require(path);
  }

我显然做错了什么,因为我得到了一个编译器错误:

代码语言:javascript
复制
ERROR in src/app/app.component.ts(24,21): error TS2591: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.

我做错了什么,我该如何着手编写一个更改markdown源代码并实际工作的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-04 07:03:48

根据文档https://www.npmjs.com/package/ngx-markdown#directive,您可以通过[src]加载文件

代码语言:javascript
复制
<!-- loaded from remote url -->
<div markdown [src]="'path/to/file.md'" (load)="onLoad($event)" (error)="onError($event)"></div>
票数 6
EN

Stack Overflow用户

发布于 2021-10-16 07:20:45

经过大量的尝试和错误之后,还有一种方法可以通过http调用使用ngx-markdown包动态呈现markdown。

使用httpclient对多维文件进行http调用

代码语言:javascript
复制
import { HttpClient } from '@angular/common/http';
import { MarkdownService } from 'ngx-markdown';


    export class AppComponent {
          title = 'personal-blog';
          markdownRaw ='';
          markdown='';
     constructor(private mdService:MarkdownService, private _httpClient:HttpClient){}

          async ngOnInit() {
            this.markdownRaw = await this._httpClient.get(`/assets/hello.md`, {
               responseType: 'text'
            }).toPromise();
        
            this.markdown=this.mdService.compile(this.markdownRaw);
             }
    
         onLoad(data:any){
         console.log(data);
          }
         
          onError(data:any){
           console.log(data);
          }
}

现在在markdown指令中使用已声明和初始化的变量作为数据属性。

代码语言:javascript
复制
<markdown [data]="markdown" (load)="onLoad($event)" (error)="onError($event)"></markdown>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56435358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档