我最近从角度2.3.1更新到2.4.7,我发现了一个非常奇怪的行为,那就是代码:
UpcomingGames.html
<div class="row nomargin upcomingGames">
<tl-responsive-height [margin]="15">
<tl-upcoming-game *ngFor="let game of gamesSubscription |async"
[game]="game"
color="#8777b4"></tl-upcoming-game>
</tl-responsive-height>
</div>
ResponsiveHeight.html模板:
<div class="scrollable"
#scrollable
(scroll)="moveScrollbar()">
<ng-content></ng-content>
</div>
<div class="scroll-rail" #scrollbar
(mousedown)="drag($event)"
></div>
如果我在角度2.3.1中运行ng server
而在2.4.7中运行ng server --aot
一切正常,但在2.4.7中使用JIT编译器,具有类可滚动的div在每个即将发布的内部传播 - 在ngFor中游戏。
我认为这可以用几张图片来理解。
如您所见,响应式高度模板在即将推出的游戏模板中重复出现。
就像我说的那样,2.4.7中的AOT或2.3.1中的JIT都不会发生这种情况。
我在应用程序中有其他页面,除了这一页外,所有页面都正常工作。 我在另一个没有参与路由器的组件中使用了responsiveHeight组件,并且可以正常工作。
我想说它与路由器+组件转换+ ngFor有关。
版本:
@angular/cli: 1.0.0-beta.31
node: 6.9.1
os: darwin x64
@angular/common: 2.4.7
@angular/compiler: 2.4.7
@angular/core: 2.4.7
@angular/forms: 2.4.7
@angular/http: 2.4.7
@angular/platform-browser: 2.4.7
@angular/platform-browser-dynamic: 2.4.7
@angular/router: 3.4.7
@angular/cli: 1.0.0-beta.31
@angular/compiler-cli: 2.4.7
更新
如果我删除ngFor正常工作。 如果我删除异步管道并使用同步数据填充ngFor,则无效。
UPDATE2:
如果我创建了一个可以转换内容的noop组件,那么一切正常:
<div class="row nomargin upcomingGames">
<noop-transclusion>
<tl-responsive-height [margin]="15">
<tl-upcoming-game *ngFor="let game of gamesSubscription |async"
[game]="game"
color="#8777b4"></tl-upcoming-game>
</tl-responsive-height>
</noop-transclusion>
</div>
看来ngFor与此有关。