【问题标题】:Change data and processResults context for Select2 in Angular2在 Angular2 中更改 Select2 的数据和 processResults 上下文
【发布时间】:2017-03-24 19:10:36
【问题描述】:

我在我的 Angular2 应用程序中使用 Select2,我需要在数据和 processResults 中使用一些类属性。但是这些上下文不是类上下文:

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,但没有任何改变。

【问题讨论】:

    标签: javascript jquery angular typescript select2


    【解决方案1】:

    如果你读了一点关于 typescript 的文章,你会发现在类内部你不应该使用 function 关键字,并且像这样绑定回调会导致 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、Angular 等……非常感谢!像魅力一样工作!
    • 这就是我们来这里的目的;)。很高兴我能帮忙
    猜你喜欢
    • 1970-01-01
    • 2016-02-03
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2019-09-13
    相关资源
    最近更新 更多