我正在使用TypeSCript运行Angular 1.5项目,我遇到了一些错误。我想检查scrollTop
元素中的.uc-card
值。
public container = document.querySelector(".uc-card");
在$onInit
我有:
public $onInit() {
this.scroll(this.container);
this.doSomething();
this.container.addEventListener('scroll', function() {
console.log('scrollOnInit');
this.scroll(this.container);
this.doSomething();
});
}
我有两个功能,scroll
和doSomething
:
private doSomething() {
console.log('doSomething');
}
private scroll(e) {
console.log('scroll')
console.log(e.scrollTop);
console.log(this.container.scrollTop);
}
当我运行应用程序时,我在控制台日志中得到以下内容:
scroll
0
0
doSomething
这很好用。我返回scrollTop
元素的.uc-card
值。但是当我滚动时,我得到以下内容:
scrollOnInit
CustomerActivitiesComponent.ts:38 Uncaught TypeError:this.doSomething不是HTMLDivElement函数。 (CustomerActivitiesComponent.ts:38)
滚动功能确实有效,因为输出显示scrollOnInit
。但是scroll
函数没有被调用(或者至少没有显示任何输出),doSomething
方法不是函数。但它们在onInit中都运行良好。
答案 0 :(得分:2)
使用arrow function, =>。常规函数语法与外部语句保持不同this
。
public $onInit() {
this.scroll(this.container);
this.doSomething();
// Setting event handler with arrow function guarantees `this` will be
// the same as this it is here
// It is like setting const _this = this, and using _this within the
// regular function
this.container.addEventListener('scroll', () => {
console.log('scrollOnInit');
this.scroll(this.container);
this.doSomething();
});
}