角棱镜JS损失区

时间:2018-07-23 21:22:07

标签: angular typescript asynchronous zonejs prismjs

我创建了一个使用PrismJS的自定义服务,并提供了一个调用Prism.highlightAll()的highlightAll()方法。我在组件中使用了HighlightService,以突出显示一个代码块,该代码块是通过angulars http.get方法用本地JSON文件中的HTML异步填充的。

模板部分:

    <pre>
      <code class=“language-markup“>
        {{data}}
      </code>
    </pre>

Component.ts部分:

    this.highlightService.loadData().subscribe(
      response => {
        this.data = response;
        Prism.highlightAll();
      }
    );

我的问题是,突出显示应用于非异步数据,而不是应用于异步数据,如上面的component.ts部分中所示。如果我触发线

    Prism.highlightAll();

通过按钮单击,然后正确突出显示异步数据。这使我认为我正在丢失区域,并且异步接收数据并突出显示以下代码后,dom没有正确更新。即使在ngZone的run()方法中调用Prism的highlightAll()方法也不起作用。

我针对该问题的解决方案是:

    ngAfterViewChecked(){
      if(dataRetrieved){
        Prism.highlightAll();
      }
    }

我的问题是: 为什么我确实会失去区域?我的解决方案正确还是有更好的方法?

[请告诉我您是否需要更多信息或更具体的代码段]

0 个答案:

没有答案