Angular 2 앱에서 Highlight JS를 사용하려고하는데 코드 블록이 정적 정보가 아닌 경우이를 사용하는 방법을 알아 내는데 문제가 있습니다. 내 말은, 코드 문자열은 http get 호출을 통해 서버에서 오는 것입니다. 나는이있는 경우Angular 2에서 Highlight JS 사용
그래서 : 내가
success(data:any){
this.submission = data;
this.criteria = data.criteria;
this.codeString = data.code;
hljs.highlightBlock(this.codeElement.nativeElement);
}
로 변경하는 경우, 그러나 아무 문제가 없습니다
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);
}
...
을 나는이를 얻을 수 :
내가 뭘 잘못하고 있니? html로는 highlightBlock
평가됩니다 바인딩 codeString
전에 불을 받고, 같은
<pre>
<code #code highlight class="java">
{{codeString}}
</code>
</pre>
내 생각은'highlightBlock'는 codeString''전에 불을 받고있다 바인딩이 평가됩니다. 다음 틱을 기다리고'highlightBlock' 함수를 호출해야 할 수도 있습니다. 'hljs.highlightBlock (this.codeElement.nativeElement); 대신'setTimeout (>) => {hljs.highlightBlock (this.codeElement.nativeElement);}, 0);' –