ngx-toc
TypeScript icon, indicating that this package has built-in type declarations

1.0.2 • Public • Published

ngx-toc

ngx-toc is an Angular library that makes table-of-contents from heading elements.

Installation

To add ngx-toc library to your package.json use the following command.

npm install ngx-toc --save

Then add imports to NgModule.

import { NgxTocModule } from 'ngx-toc';

@NgModule({
  ...
  imports: [
    NgxTocModule,
  ...
})

Usage

This library provides service to create toc.

Use with static html

import { AfterViewInit, Component, ElementRef, Renderer2, ViewChild } from '@angular/core';
import { Router } from '@angular/router';
import { TocService } from 'ngx-toc';

@Component({
  template: `
  <div #toc id="toc"></div>
  <div id="toc-target">
    <h1 id="h1-1">h1-1</h1>
    <h1 id="h1-2">h1-2</h1>
    <h2 id="h2-1">h2-1</h2>
    <h2 id="h2-2">h2-2</h2>
    <h3 id="h3-1">h3-1</h3>
    <h1 id="h1-3">h1-3</h1>
  </div>`,
  styleUrls: ['./demo2.component.css']
})
export class Demo2Component implements AfterViewInit {

  @ViewChild('toc') 
  element!: ElementRef;

  constructor(private tocService: TocService, private renderer: Renderer2, private router: Router) {
  }
  ngAfterViewInit(): void {
    this.renderer.appendChild(this.element.nativeElement, this.tocService.createToc('toc-target', ['h1', 'h2', 'h3'], this.router.url, this.renderer));
  }
}

You can find example at Github and Demo.

Use with ngx-markdown

ngx-markdown is the library to use markdown in Angular.
ngx-toc can collaborate with this.

  • html
<div #toc id="toc"></div>
<markdown id="toc-target" [src]="path/to/file.md" (ready)="onReady()"></markdown>
<!-- <markdown></markdown> is ngx-markdown component. -->
  • component
import { Component, ElementRef, Renderer2, ViewChild } from '@angular/core';
import { Router } from '@angular/router';
import { TocService } from 'ngx-toc';

@Component({
  selector: 'app-demo2',
  templateUrl: './demo2.component.html',
  styleUrls: ['./demo2.component.css']
})
export class Demo2Component {

  @ViewChild('toc') 
  toc!: ElementRef;

  constructor(private tocService: TocService, private renderer: Renderer2, private router: Router) {
  }

  onReady() {
    this.renderer.appendChild(this.toc.nativeElement, this.tocService.createToc('toc-target', ['h1', 'h2', 'h3'], this.router.url, this.renderer));
  }

}

You can find example at Github and Demo.

Parameters

TocService.createToc(targetId: string, targetHeadings: string[], path: string, renderer: Renderer2): HTMLElement
parameter type description example
targetId string id of target element to create toc 'toc-target'
if you'd like to create toc of following element.
<div id="toc-target"><h1 id="bar">bar</h1></div>
targetHeadings string[] heading tags to crate toc from ['h1', 'h2', 'h3']
then create toc from h1, h2, h3 tags.
path string path of href value '/foo'
then href of toc is href="/foo#id".
renderer Renderer2 renderer to render toc -

License

Licensed under MIT.

Package Sidebar

Install

npm i ngx-toc

Weekly Downloads

49

Version

1.0.2

License

MIT

Unpacked Size

79.1 kB

Total Files

20

Last publish

Collaborators

  • hiromasanojima