这是我的更新方法,它将新数据作为输入
public updateChart(mockData?: any) {
this.path.data(this.pie(this.dataset))
.transition()
.duration(750)
.attrTween('d', <any> this.arcTween);}`
这是我的arcTween方法:
public arcTween(a: any): any {
let i = d3.interpolate(this.current, a);
this.current = i(0);
return function (t) {
return this.arc(i(t));
};
}
调用上面指定的方法时出现问题: core.es5.js:1084 ERROR TypeError:无法设置未定义的属性'arc'
仔细检查表明,“这个”也是未定义的。
我该如何解决这个问题?似乎d3.js不适合角4:S
我尝试了很多变通办法,但一切都会导致此错误
答案 0 :(得分:0)
我认为你有一个范围问题,你可以解决这个问题:
public arcTween(a: any): any {
let i = d3.interpolate(this.current, a);
let that = this;
this.current = i(0);
return function (t) {
return that.arc(i(t));
};
}
答案 1 :(得分:0)
string input = "1h 0m";
string[] formats = { @"m\m", @"h\h\ m\m" };
TimeSpan ts;
TimeSpan.TryParseExact(input, formats, null, out ts);
就会超出范围 - 它会丢失上下文。一个修复是 s.alem 如何更改代码以添加this
然后在函数内使用let that = this;
- that
将继续保持值that
。尝试修复它的另一种方法是将其转换为箭头函数:
(伪代码,我没有试过这个,但你会得到这个想法)
this
另一种方法是,如果这是在对象上编写的方法,则可以通过该对象调用它。因此,如果public arcTween(a: any): any {
let i = d3.interpolate(this.current, a);
this.current = i(0);
return t() => {
return this.arc(i(t)); //this will be as expected
};
}
是arcTween
对象上的方法,则可以使用
animation
它会保持animation.arcTween()
完好无损。
希望其中一个修复范围问题。