为什么这段代码不能在AOT模式下编译?

时间:2017-03-07 20:28:43

标签: javascript angular

下面有一段代码,为什么不能在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模式下,我的应用程序中未定义的任何内容是否会失败?

1 个答案:

答案 0 :(得分:5)

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