首页 文章

如何从d3函数中恢复typescript 'this'范围?

提问于
浏览
3

D3会覆盖'this'变量,允许您在使用不同方法时查看当前选择 .

我还需要'this'来访问typescript中的类成员属性 . 我目前不确定如何在需要时保留两者 .

tweenArc(datum: any, index: number, attr: string) {
    console.log(this);
    console.log(this.classVariable);
...
}

第一个 console.log 将写出d3选择,在这种情况下是一个svg元素 .

如果我试图从类中访问成员属性,但是我不能定义函数 . console.log 返回 undefined .

1 回答

  • 1

    我提出的一个解决方案是改变我定义回调的方式 . 我没有将回调作为函数放在typescript类中,而是使用lambda内联创建它,因此我可以访问在包装类中定义的选择,以及对typescript类的 this 变量的访问 .

    如果有更好的方式我想知道,因为这迫使一个特定的架构 .

    selection.transition()
                .duration(this.duration)
                .attrTween("d", (datum: any, index: number, attr: string) => {
                    let previousEndAngle = parseFloat(selection.attr("endAngle"));
                    let endAngle = this.d3Utility.arcPercentage(value, maxValue, startAngle, isClockwise, this.arcLength);
                    let interpolator = d3.interpolate(previousEndAngle, endAngle);
    
                    return (t: number): any => {
                        selection.attr("endAngle", interpolator(t));
    
                        return this.drawArc(startAngle, interpolator(t), radii[0], radii[1])(null);
                    }
                });
    

相关问题