Javascript 不在IE 11中更新(RC4与CoreJS)

Javascript 不在IE 11中更新(RC4与CoreJS),javascript,internet-explorer,angular,Javascript,Internet Explorer,Angular,首先,我在问题部分查看了所有关于angular和IE关于stackoverflow的现有问题,以及angular本身的git回购。找不到任何有助于我的东西,因此这绝对不是重复(IE和ng2在垫片方面存在许多问题,应该使用CoreJS解决) 我在IE 11中使用*ngFor时遇到了角度(RC4)问题(可能还有更低版本) 我有一个列表组件,它保存一个listData数组(一个通过@Input()提供的对象数组) 此外,我还有一个指令(类似于惰性加载程序),它观察滚动位置,并在到达特定点时调用后端方法

首先,我在问题部分查看了所有关于angular和IE关于stackoverflow的现有问题,以及angular本身的git回购。找不到任何有助于我的东西,因此这绝对不是重复(IE和ng2在垫片方面存在许多问题,应该使用
CoreJS
解决)

我在IE 11中使用
*ngFor
时遇到了角度(RC4)问题(可能还有更低版本)

我有一个列表组件,它保存一个
listData
数组(一个通过
@Input()
提供的对象数组)

此外,我还有一个指令(类似于惰性加载程序),它观察滚动位置,并在到达特定点时调用后端方法(想想无限滚动指令)

在我的主视图中,我使用这个附加了指令的列表组件,并从这个主组件控制它

我尽量简化组件/指令:

scroll指令在这一点上没有什么作用,它有一个本机事件监听器连接到
窗口。scroll
事件,检查父组件维度,从
主组件
调用通过
@Input
提供的后端方法,并在完成加载后使用加载的数据发出和事件

正如我已经提到的,ListView组件持有对整个数据的引用(由主组件初始化)

我的主要组成部分:

export class MyMainComponent {
    @ViewChild(ListViewComponent) listView: ListViewComponent;

    listData: any[];

    constructor(private _zone: NgZone) {
        this.getBackendDataMocked().subscribe((arr) => {
            this.listData = arr;
        });
    }

    onLazyLoadComplete(loadedData: any[]) {
        // this._zone.run(() => { // todo: ie11 and below fix.
            for (let item of loadedData) {
                this.listData.push(item);
            }
        // });
        this.listView.refresh();
    }
}
模板初始化listView和指令,如下所示:

<list-view *ngIf="listData"
     lazy-loader
     [doLazyLoad]="getBackendDataMocked()"
     (onLazyLoadStart)="onLazyLoadStart($event)"
     (onLazyLoadComplete)="onLazyLoadComplete($event)"
     [listData]="listData">
</list-view>
<script src="src/vendor/node_modules/shim.min.js"></script> // core js
<script src="src/vendor/node_modules/system.src.js"></script> 
<script src="src/vendor/node_modules/Reflect.js"></script>
<script src="src/vendor/node_modules/zone.js"></script>
但我不可能这么做

My index.html(关于垫片、导入顺序等)如下所示:

<list-view *ngIf="listData"
     lazy-loader
     [doLazyLoad]="getBackendDataMocked()"
     (onLazyLoadStart)="onLazyLoadStart($event)"
     (onLazyLoadComplete)="onLazyLoadComplete($event)"
     [listData]="listData">
</list-view>
<script src="src/vendor/node_modules/shim.min.js"></script> // core js
<script src="src/vendor/node_modules/system.src.js"></script> 
<script src="src/vendor/node_modules/Reflect.js"></script>
<script src="src/vendor/node_modules/zone.js"></script>
//核心js
更改脚本标记的顺序,添加
es6 shim
,添加
shims-for-ie.js
(这也在某处提到)。没有什么能起作用(很明显,这是有作用的,但对这个问题来说不是)

最后一件事:由于
zone.run
的东西确实有效,我认为它与我使用
zone.runOutsideAngular()
在listView中添加的事件侦听器有关,但事实并非如此。如果我删除
runOutsideAngular
调用性能将下降,并且无法解决我的问题。我不得不说,我还没有弄清楚整个
zone.js
的东西

任何帮助都将不胜感激。如果我应该提供更多的代码,请在评论中询问,我会这样做,但我认为这应该足够了

使用

@HostListener('window:scroll'/*, ['$event']*/)
eventHandler(/*event) {
  ...
}
而不是

window.addEventListener

如何侦听滚动事件?本机事件侦听器窗口。addEventlistener。使用HostListener没有区别。如果使用
HostListener
无法解决此问题,我不明白为什么要使用
zone。运行(…)
会有帮助。我会再试一次以确定。至少您现在可以使用它:再次感谢。令人沮丧的是…我的想法是“好的,必须在我的listComponent中使用window.scroll而不是
@HostListener
内部
runOutsideAngular()
,否则
ngOnChanges
会在我附加的指令中无休止地触发,为了保持一致性,我还将其更改为
window.addEventListener
”。。。