highlight.js does not work with Angular 2
You need to explicitly apply highlightjs
on a block this way:
import {Component, ElementRef, ViewChild} from 'angular2/core';
declare var hljs: any;
@Component({
selector: "my-app",
template: `
Hello!
<pre>
<code #code class="html">
<html>
<body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
</body>
</html>
</code>
</pre>
`
})
export class AppComponent{
@ViewChild('code')
codeElement: ElementRef;
ngAfterViewInit() {
hljs.highlightBlock(this.codeElement.nativeElement);
}
}
See this plunkr
A good approach would be to create a custom directive for this:
@Directive({
selector: 'code[highlight]'
})
export class HighlightCodeDirective {
constructor(private eltRef:ElementRef) {
}
ngAfterViewInit() {
hljs.highlightBlock(this.eltRef.nativeElement);
}
}
and use it this way:
@Component({
selector: "my-app",
template: `
Hello!
<pre>
<code highlight class="html">
(...)
</code>
</pre>
`,
directives: [ HighlightCodeDirective ]
})
(...)
I think that you have to fire highlight manually.
To do that you can delegate this function to special directive like:
@Directive({
selector: 'pre'
})
class PreHighlight implements AfterViewInit {
constructor(private elRef: ElementRef) {}
ngAfterViewInit() {
hljs.highlightBlock(this.elRef.nativeElement);
}
}
Plunker Example
I have published highlight.js module for angular, install it from npm
npm install --save ngx-highlightjs
It is very simple to use, it loads highlight.js automatically for you and works with lazy modules, check out the demo