控制器承诺中的绑定变量

时间:2015-12-07 02:31:32

标签: angularjs typescript

我是JS和TypeScript的新手,我只是想检查自己。他是我的控制者:

class DefectListController implements IDefectListModel {
    itemId: string;
    defects: any[];

    static $inject = ['$stateParams', 'defectResource'];

    constructor($stateParams: any, defectResource: any) {
        this.itemId = $stateParams.itemid;

        // defects
        defectResource.defectsByItemId($stateParams.itemid).then(function (data) {
            this.defects = data;
        });
    }
}

在这种情况下,我的视图中有itemId变量,但我没有defects变量。我认为原因是this是承诺中的Window

所以我修复了这样的代码(现在它正在运行):

class DefectListController implements IDefectListModel {
    itemId: string;
    defects: any[];

    static $inject = ['$stateParams', 'defectResource'];

    constructor($stateParams: any, defectResource: any) {
        var self = this;
        this.itemId = $stateParams.itemid;

        // defects
        defectResource.defectsByItemId($stateParams.itemid).then(function (data) {
            self.defects = data;
        });
    }
}

我只是想知道这是一个很好的解决方案吗?或者可能有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:4)

  我只是想知道这是一个很好的解决方案吗?或者可能有更好的方法来做到这一点?

这是一个很好的解决方案。更好的方法是使用箭头功能:

  // defects
    defectResource.defectsByItemId($stateParams.itemid).then((data) => {
        this.defects = data;
    });

有关TypeScript中箭头函数的更多信息:https://basarat.gitbooks.io/typescript/content/docs/arrow-functions.html