在filter方法中使用类变量

时间:2016-06-27 15:01:17

标签: javascript jquery angularjs typescript

我正在使用AngularJS和Typescript。我试图解决的问题如下:

  • 在Typescript控制器类中,我有一系列贷款,每笔贷款都有一个货币对象。
  • 在用户界面中,每种货币都有一个标签。

我想调用getLoans()方法来显示每个标签(货币)中的贷款清单。在类中,我有一个包含所有贷款的数组,getLoans()方法根据所选选项卡(选定货币)筛选该数组,并返回已过滤的贷款。

以下是代码:

class MyClass {
    public selectedCurrency: app.models.Currency;
    private loans: app.models.Loan[];

    getLoans(): app.models.Loan[] {
        if (this.loans) {
            return this.loans.filter(this.filterBySelectedCurrency);
        }
        return null;
    }

    filterBySelectedCurrency(loan: app.models.Loan): boolean {
        return loan && this.selectedCurrency && loan.Currency == this.selectedCurrency;
    }
}

上述代码无效,因为filterBySelectedCurrency(..)方法this.selectedCurrencyundefined。但是,在调用代码之前调试代码(在getLoans()方法中),this.selectedCurrency具有正确的值。

显然由于某些原因,我无法从过滤器方法中访问类变量this.selectedCurrency。是这种情况吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

直接传递函数会导致上下文 - this - 丢失。您可以通过传入箭头函数来维护上下文。

改变这个:

return this.loans.filter(this.filterBySelectedCurrency);

对此:

return this.loans.filter((loan) => this.filterBySelectedCurrency(loan));