我试图像这样调用类构造函数的方法:
' var paddleCtrl = scope.paddleRanged;
paddleCtrl.slider = slider;
this.$paddleLeft = paddleCtrl.$paddleLeft = $(elem).find('.paddle-left'),
this.$paddleRight = paddleCtrl.$paddleRight = $(elem).find('.paddle-right'),
this.$paddleRailActive = paddleCtrl.$paddleRailActive = $(elem).find('.paddle-rail .active'),
this.$clickZone = paddleCtrl.$clickZone = $(elem).find('.clickZone');
this.paramsInit();
}'
方法声明如下:
paramsInit() {
console.log(this)
}
但是得到这个错误:" this.paramsInit不是函数"。我试图声明一个方法:
paramsInit = () => {
console.log(this)
}
但是如果方法调用,那么这将引用Window对象
上的示例答案 0 :(得分:0)
通过使用关键字“new”分配函数“link”来解决问题。
例如:
console.clear();
class TestController{
constructor(){
}
}
class TestLink {
constructor(scope, elem, attr, ctrl){
console.log('Method call:')
this.method();
console.log('Method2 call:')
this.method2();
console.log('Method3 call:')
this.method3();
}
method = () => {
console.log(this);
}
method2 = function() {
console.log(this);
}
method3() {
console.log(this);
}
}
class TestDirective {
restrict='E';
replace=true;
scope={};
controller=TestController;
controllerAs='Test';
bindTocOntroller=true;
link=(scope, elem, attr)=>{
return new TestLink(scope, elem, attr);
};
template='<p>Hello</p>'
}
angular.module('App', [])
.directive('test', ()=>new TestDirective);
codepen上的代码。