打字稿-无法在功能内部访问数据

时间:2019-03-11 08:31:50

标签: angularjs typescript

我已经在打字稿中的setBinary方法内创建了递归(rec)函数。但是由于某些原因,无法在打字稿中的递归函数内部访问copyColumns数据,但在rec函数外部运行良好。我的代码有什么问题。

在运行console.log(this.copyColummns);时出现未定义的状态。

copyNodeHandler ( column, node ) {
            this.copyHeaders = [];
            this.copyHeadersDeepCopy = [];
            for ( let i = 0; i < node[ 0 ].values.length; i++ ) {
                this.copyHeaders.push(node[ 0 ].values[ i ].parameterId)
            }
            this.copyColumns = node;
        }

setBinary(rowId, vId, data) {          


console.log(this.copyColumns); // working fine

    let rec = function (pri, pvi) {
        console.log(pri + '' + pvi);
        console.log(this.copyColumns); // Not working returns undefined.
        let latest = [];           
        if (this.copyColumns[pri]) {
            this.copyColumns[pri].values[pvi].active = true;          

           let  x = this.copyColumns[pri].values[pvi]
            rec(x.pri, x.pvi)
        }
    };


    rec(data.pri, data.pvi)

}

1 个答案:

答案 0 :(得分:1)

您正在创建一个新的function,它将在javascript中创建一个新的作用域。

您可以使用箭头函数(保留其定义的功能范围),或者需要将此函数绑定到函数。

方法1:

           // arrow function
let rec = (pri, pvi) => {
    console.log(pri + '' + pvi);
    console.log(this.copyColumns); // Now this.copyColumns will be the same as outside this function
    let latest = [];           
    if (this.copyColumns[pri]) {
        this.copyColumns[pri].values[pvi].active = true;          

       let  x = this.copyColumns[pri].values[pvi]
        rec(x.pri, x.pvi)
    }
};

方法2:

let rec = function (pri, pvi) {
    console.log(pri + '' + pvi);
    console.log(this.copyColumns); // Not working returns undefined.
    let latest = [];           
    if (this.copyColumns[pri]) {
        this.copyColumns[pri].values[pvi].active = true;          

       let  x = this.copyColumns[pri].values[pvi]
        rec(x.pri, x.pvi)
    }
// bind this to the function
}.bind(this);