我下面有一段代码,为什么不能在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.title
或talk.speaker
是如何编译的?它们不是动态代码吗?就像在我的应用程序中未定义的所有内容在Aot模式下会失败一样吗?
最佳答案
AOT要求您的所有模板都必须是静态可分析的。换句话说,您只需查看代码而不运行它,就可以准确了解模板正在使用的其他组件/指令/管道/绑定。在给出的示例中,您不知道模板是什么,因为组件的实际模板字符串取决于仅在运行代码时才知道的值(window.hide)。