下面有一段代码,为什么不能在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模式下,我的应用程序中未定义的任何内容是否会失败?
答案 0 :(得分:5)
AOT要求您的所有模板都是静态可分析的。换句话说,只需查看代码而不运行代码,就可以准确理解模板正在使用的其他组件/指令/管道/绑定。在给出的示例中,您不知道模板的内容,因为组件的实际模板字符串取决于值(window.hide),只有在运行代码时才知道