Ich versuche, Highlight JS in meiner Angular 2-App zu verwenden, und habe Probleme, herauszufinden, wie ich es verwenden kann, wenn der Codeblock keine statische Information ist. Was ich meine, ist, dass die Code-Zeichenfolge vom Server über einen http get-Aufruf kommt.Verwenden von Highlight JS in Angular 2
Also, wenn ich diese:
export class WorkstationComponent implements OnInit {
private submission = new Submission();
private criteria = new Array<ExerciseCriteria>();
private codeString:string = `
/* HelloWorld.java
*/
public class HelloWorld
{
public static void main(String[] args) {
System.out.println("Hello World!");
}
}`;
constructor(private _router:Router, private submissionService:SubmissionService,
private activatedRoute:ActivatedRoute){}
@ViewChild('code') codeElement: ElementRef;
ngOnInit(){
this.activatedRoute.params
// (+) converts string 'id' to a number
.switchMap((params: Params) => this.submissionService.getSubmission(+params['id']))
.subscribe(data => this.success(data),
error => this.fail(error));
}
success(data:any){
this.submission = data;
this.criteria = data.criteria;
hljs.highlightBlock(this.codeElement.nativeElement);
}
Es gibt kein Problem ...
Wenn ich jedoch auf
success(data:any){
this.submission = data;
this.criteria = data.criteria;
this.codeString = data.code;
hljs.highlightBlock(this.codeElement.nativeElement);
}
ändern bekomme ich diese :
Was mache ich falsch? Die HTML ist die gleiche
<pre>
<code #code highlight class="java">
{{codeString}}
</code>
</pre>
Meine Vermutung 'highlightBlock' ist immer Feuer vor' codeString' Bindung wird ausgewertet. Möglicherweise müssen Sie auf den nächsten Haken warten und die Funktion "highlightBlock" aufrufen. Wie bei 'setTimeout (() => {hljs.highlightBlock (this.codeElement.nativeElement);}, 0);' anstelle von 'hljs.highlightBlock (this.codeElement.nativeElement);' –