Для начала работы с библиотекой Marked в Angular необходимо установить её через npm:
npm install marked
После установки библиотеку можно импортировать в компонент или сервис Angular. Например:
import { marked } from 'marked';
Marked предоставляет функцию marked(), которая принимает
Markdown-текст и возвращает HTML.
Marked поддерживает глобальные и локальные настройки. Основные параметры конфигурации:
true).<br> (по умолчанию false).Пример настройки:
marked.setOptions({
gfm: true,
breaks: false,
headerIds: true
});
Эти параметры влияют на поведение всех последующих вызовов
marked() в приложении.
Markdown-текст часто хранится в виде строки. Для преобразования в HTML можно создать метод в компоненте:
export class MarkdownComponent {
markdown: string = `
# Заголовок первого уровня
Это **жирный текст** и _курсив_.
`;
get htmlContent(): string {
return marked(this.markdown);
}
}
В шаблоне Angular HTML выводится через привязку свойства с безопасной вставкой:
<div [innerHTML]="htmlContent"></div>
Для безопасности важно использовать DomSanitizer, чтобы
Angular не блокировал HTML:
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
export class MarkdownComponent {
markdown: string = '# Пример Markdown';
htmlContent: SafeHtml;
constructor(private sanitizer: DomSanitizer) {
this.htmlContent = this.sanitizer.bypassSecurityTrustHtml(marked(this.markdown));
}
}
Marked позволяет создавать собственные рендереры для тонкой настройки вывода. Это полезно, например, для изменения внешнего вида заголовков, ссылок или списков:
import { Renderer } from 'marked';
const renderer = new Renderer();
renderer.link = (href: string, title: string, text: string) => {
return `<a href="${href}" target="_blank" rel="noopener">${text}</a>`;
};
marked.setOptions({ renderer });
Применение кастомного рендерера позволяет:
Часто Markdown хранится во внешних файлах. В Angular их можно
загрузить через HttpClient:
import { HttpClient } from '@angular/common/http';
export class MarkdownService {
constructor(private http: HttpClient) {}
loadMarkdown(path: string): Promise<string> {
return this.http.get(path, { responseType: 'text' }).toPromise();
}
}
После получения текста его можно отобразить через
marked() и DomSanitizer.
Marked удобно использовать для динамического обновления контента в
реактивных формах Angular. Например, при вводе текста в
textarea можно отображать Markdown-предварительный просмотр
в реальном времени:
<form [formGroup]="markdownForm">
<textarea formControlName="content"></textarea>
</form>
<div [innerHTML]="sanitizer.bypassSecurityTrustHtml(marked(markdownForm.value.content))"></div>
Это позволяет строить редакторы Markdown с мгновенной визуализацией.
Marked поддерживает блоки кода через тройные обратные кавычки. Для подсветки синтаксиса часто используют библиотеки вроде Prism.js или Highlight.js. Пример интеграции с Highlight.js:
import hljs from 'highlight.js';
marked.setOptions({
highlight: (code, lang) => {
return hljs.getLanguage(lang) ? hljs.highlight(code, { language: lang }).value : code;
}
});
Теперь все блоки кода будут автоматически подсвечиваться.
При большом объёме Markdown рендеринг на лету может быть медленным. Для улучшения производительности:
ChangeDetectionStrategy.OnPush в
компоненте.marked() для неизменного
текста.textarea и динамический превью Markdown.Marked в Angular обеспечивает гибкий и производительный способ работы с Markdown, сохраняя при этом полную совместимость с возможностями платформы и безопасностью рендеринга HTML.