ng如果为false时不立即加载模板

时间:2019-04-08 02:05:31

标签: angular angular-ng-if

我有一个组件,如果为true,它将加载YouTube视频。但是,当ngIf语句评估为false时,将不会加载模板。问题的背景是,当广告拦截器阻止Youtube视频时,我试图有条件地呈现div,以使用户知道为什么内容没有加载而不是白框。我已经创建了一个返回布尔值的服务,并且我确定它可以正常工作。有趣的是,当我在Chrome开发者工具元素过滤器中搜索匹配的文本时,它触发了模板的加载。

到目前为止,我已经尝试将变更检测参考放入各种生命周期中。没有太多的运气。我建立在最初由其他人编写的组件上。它确实在onPush上实现了更改检测策略。我不确定这是否会造成问题。

<div *ngIf='loadYoutube; else loadError'>
    <iframe [width]="width"
        [height]="height"
        [src]="src | safe:'url'"
        frameborder="0"
        allowfullscreen
        class="youtube-player">
    </iframe>
</div>
<ng-template #loadError>
    <p>
      Turn Yo ad blocker off please
    </p>
</ng-template>

当前,当loadYouTube评估为true时,它会按预期执行。如果为false,则会出现一个白框。如前所述,从Chrome检查器的“元素”标签中搜索关键字时,模板会加载。

2 个答案:

答案 0 :(得分:0)

Loadyoutube总是有价值吗?您是在构造函数中还是在ngOnInit中进行初始化?

同时尝试使用默认策略,我认为onPush可能会为您带来问题。

答案 1 :(得分:0)

感谢帮助人员。和往常一样,这个问题比原先想象的要简单得多。在较高级别的主管中,实际上有一块画布占用了文本要占用的相同区域。有趣的是,在chrome元素工具中搜索关键文本时,它将文本显示在最前面。这使我们认为这是一个角度渲染问题。只是一个晦涩的陷阱。