Javascript 在Angular2中更改Select2的数据和processResults上下文
我在Angular2应用程序中使用Select2,我需要在data和processResults中使用一些类属性。但是,这些上下文不是类上下文:Javascript 在Angular2中更改Select2的数据和processResults上下文,javascript,jquery,angular,typescript,select2,Javascript,Jquery,Angular,Typescript,Select2,我在Angular2应用程序中使用Select2,我需要在data和processResults中使用一些类属性。但是,这些上下文不是类上下文: export class DefaultFormInputSelectComponent { @Input() private validator; private select2Options() { return { ajax: { url: 'api',
export class DefaultFormInputSelectComponent {
@Input() private validator;
private select2Options() {
return {
ajax: {
url: 'api',
dataType: 'json',
delay: 250,
data: this.ajaxData,
processResults: this.ajaxProcessResults
}
}
};
ajaxData = function(params) {
// this variable is not in DefaultFormInputSelectComponent context
this.validator; // returns undefined, but it is not in DefaultFormInputSelectComponent context
}
ajaxProcessResults = function(data) {
// same issue as ajaxData
}
}
我试图在
ajax
属性中添加context:this
,但没有任何更改。如果您阅读了一些关于typescript的内容,您会发现在类中不应该使用函数
关键字,并且像这样的绑定回调将导致this
上下文被放置到函数中。您应该使用箭头函数表示法来创建函数或使用bind
。或者您可以使用匿名箭头函数包装器:)您可以决定最喜欢什么:
export class DefaultFormInputSelectComponent {
@Input() private validator;
private select2Options(): any {
return {
ajax: {
url: 'api',
dataType: 'json',
delay: 250,
data: this.ajaxData,
processResults: this.ajaxProcessResults.bind(this),
anotherCallback: (data) => {
this.processAnother(data);
}
}
}
}
private ajaxData: Function = (params: any): void => {
console.log(this); //DefaultFormInputSelectComponent
};
private ajaxProcessResults(data: any): void {
console.log(this); //DefaultFormInputSelectComponent
}
private processAnother(data: any): void {
console.log(this); //DefaultFormInputSelectComponent
}
}
我不知道。实际上我只是在学习TS,角度,等等。。。非常感谢你!工作得很有魅力!这就是我们来这里的目的;)。很高兴我能帮忙