我下面有一段代码,为什么不能在AOT模式下编译?

@Component({
  selector: 'talk-cmp',
  template: () => window.hide ? 'hidden' : `
    {{talk.title}} {{talk.speaker}}
    Rating: {{ talk.rating | formatRating }}
    <watch-button [talk]="talk"></watch-button>
    <rate-button [talk]="talk" (click)="onRate()"></rate-button>
  `
})
class TalkCmp {
  //...
}


罪魁祸首是window.hide,我不明白的是talk.titletalk.speaker是如何编译的?它们不是动态代码吗?

就像在我的应用程序中未定义的所有内容在Aot模式下会失败一样吗?

最佳答案

AOT要求您的所有模板都必须是静态可分析的。换句话说,您只需查看代码而不运行它,就可以准确了解模板正在使用的其他组件/指令/管道/绑定。在给出的示例中,您不知道模板是什么,因为组件的实际模板字符串取决于仅在运行代码时才知道的值(window.hide)。

10-07 14:48