npm i @notiz/ngx-markdoc @markdoc/markdoc js-yaml
npm i -D @types/js-yaml
Set esModuleInterop
to true
in your tsconfig.json
.
Provide HttpClient
in your app.config.ts
import { ApplicationConfig } from '@angular/core';
import { provideRouter } from '@angular/router';
import { routes } from './app.routes';
import { provideHttpClient } from '@angular/common/http';
export const appConfig: ApplicationConfig = {
providers: [provideRouter(routes), provideHttpClient()],
};
Import Markdoc
into your component and use <markdoc></markdoc>
in your template.
import { Component } from '@angular/core';
import { Markdoc } from '@notiz/ngx-markdoc';
@Component({
selector: 'app-docs',
standalone: true,
imports: [Markdoc],
template: ` <markdoc src="assets/md/docs/getting-started.md"></markdoc> `,
})
export class DocsComponent {}
<markdoc> # Markdoc for Angular </markdoc>
<markdoc content="# Markdoc for Angular"> </markdoc>
<markdoc src="assets/md/example.md"></markdoc>
Use provideMarkdocOptions
to optionally pass a Markdoc configuration options.
import { ApplicationConfig } from '@angular/core';
import { provideRouter } from '@angular/router';
import { routes } from './app.routes';
import { provideHttpClient } from '@angular/common/http';
import { provideMarkdocOptions } from '@notiz/ngx-markdoc';
import { Config, Node, Tag } from '@markdoc/markdoc';
export const appConfig: ApplicationConfig = {
providers: [
provideRouter(routes),
provideHttpClient(),
provideMarkdocOptions({
config: {
tags: {
figure: {
selfClosing: true,
attributes: {
src: { type: String, required: true },
alt: { type: String, required: true },
caption: { type: String, required: true },
},
transform: (node: Node, config: Config) => {
const { src, alt, caption } = node.transformAttributes(config);
const imageTag = new Tag('img', { src, alt });
const captionTag = new Tag('figcaption', {}, [caption]);
return new Tag('figure', {}, [imageTag, captionTag]);
},
},
},
},
}),
],
};
Now you can use {% figure %}
tag in your Markdown file
{% figure src="https://images.unsplash.com/photo-1610296669228-602fa827fc1f?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1675&q=80" alt="Pelican nebulae mosaic" caption="Pelican nebulae mosaic" /%}