Angular 为什么赢了';缺少属性时aot编译器出错?
使用以下代码: 模板Angular 为什么赢了';缺少属性时aot编译器出错?,angular,angular-aot,Angular,Angular Aot,使用以下代码: 模板 <button (click)="myMethod()">myMethod()</button> <!-- <button (click)="foo()">foo()</button> --> <ng-container [ngSwitch]="state"> <ng-container *ngSwitchCase="0"> <div></div>
<button (click)="myMethod()">myMethod()</button>
<!-- <button (click)="foo()">foo()</button> -->
<ng-container [ngSwitch]="state">
<ng-container *ngSwitchCase="0">
<div></div>
<button (click)="myMethod()">myMethod()</button>
<button (click)="foo()">foo()</button><!-- why no error -->
</ng-container>
<div *ngSwitchCase="1"></div>
</ng-container>
ng build--aot
builds,但是如果您取消注释模板中的第2行,您将得到预期的结果
类型“MyComponent”上不存在属性“foo”
为什么ng容器中的foo()
没有错误
在你建议之前:
<div *ngSwitchCase="0">
<div></div>
<button (click)="myMethod()">myMethod()</button>
<button (click)="foo()">foo()</button><!-- why no error -->
</div>
myMethod()
foo()
那将变成
<div>
<div></div>
<button>myMethod()</button>
<button>foo()</button>
</div>
myMethod()
foo()
但我只需要
<div></div>
<button>myMethod()</button>
<button>foo()</button>
myMethod()
foo()
还有其他方法可以解决这个问题,但问题是在做出错误或壮举之前要有基本的了解。“还有其他方法可以解决这个问题吗…”
你试过这个吗
默认情况下,此AOT设置(当前)处于非活动状态
奖金:
另请参见编译器github上关于绑定表达式的本节:
验证使用TypeScript类型检查器和提供给TypeScript编译器的选项来控制类型验证的详细程度
在此阶段抛出错误“类型Y上不存在属性X”,验证详细信息的级别可以通过编译器参数进行调整,如前面提到的参数“fulltemplatetypecheck”。这是我的评论:
AoT预先编译模板,并寻找要生成的绑定。另一方面,将它放在ng容器中是一件特殊的事情,因为ng容器在被调用之前不会被解释和编译
见本文:
我试着搜索更多的信息,我只是回到你关于角度问题的第一个评论:
从此线程到此问题的链接:
这似乎是一个持续的bug,所以这意味着ng容器应该被编译。
我想你现在对此无能为力 我认为这可能与AoT预先编译模板有关,并且正在寻找要生成的绑定。另一方面,将它放在ng容器中是一件特殊的事情,因为ng容器在被调用之前不会被解释和编译。请参阅本文:啊,那么ng容器在构建时没有编译吗?如果是这样,我将接受这个答案。请告诉我这是否解决了您遇到的问题。不确定如何在angular cli项目中设置fullTemplateTypeCheck
。似乎暗示它在aot构建时已设置为true。如果在tsconfig.json
中设置,但在tsconfig.app.json
中似乎有效,则会抛出未知编译器选项“angularCompilerOptions”。
,只是害怕在Automatic stuff cli上设置angularCompilerOptions
,我认为您不应该害怕fulltemplatetypecheck参数。文件明确表示,在未来的默认情况下,它将是true
。我猜,出于性能原因,开发团队在编译器早期将此参数设置为false
。我的意思是,默认情况下angularcomileroptions
甚至不是cli项目中tsconfig.app.json
的一部分。为fulltemplatetypecheck
设置一个属性可用于简单的复制repo,但我如何才能确信设置angularCompilerOptions
不会覆盖任何其他编译器选项,也不会在以后的生产线或大型生产项目中以不可预见的方式更改angular cli的行为。(以前在美国做过类似的事情)
<div></div>
<button>myMethod()</button>
<button>foo()</button>