Angular 2 JIT Compiler非常奇怪的行为

时间:2017-02-16 09:49:43

标签: angular angular2-compiler

我最近从角度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中游戏。

我认为这可以用几张图片来理解。

这是正确的行为: enter image description here

这是奇怪的行为: enter image description here

如您所见,响应式高度模板在即将推出的游戏模板中重复出现。

就像我说的那样,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与此有关。

0 个答案:

没有答案