Angular 解析typescript的另一个私有方法中函数内的私有方法调用的范围
框架:角度5.x 结构如下:Angular 解析typescript的另一个私有方法中函数内的私有方法调用的范围,angular,typescript,Angular,Typescript,框架:角度5.x 结构如下: ngAfterViewInit() { // ... Some svg rendering code function dblclick(d) { d3.select(this).select('circle').transition() .duration(1000) .attr('r', 14); this.makeJsonBackEnd(d); // in the browser c
ngAfterViewInit() {
// ... Some svg rendering code
function dblclick(d) {
d3.select(this).select('circle').transition()
.duration(1000)
.attr('r', 14);
this.makeJsonBackEnd(d); // in the browser console this is not a function error
}
}
makeJsonBackEnd(node) {
// extract info from d3 node to make a JSON for backend
}
我认为,由于ngAfterViewInit()
中的函数
,组件类的作用域被弄乱了,无法识别该
如何在dblclick()中调用makeJsonBackEnd()
我尝试将dblclick
作为类的私有方法,但是d3中的this
调用不会被识别。选择(this)
将使用闭包
ngAfterViewInit() {
const self = this;
// ... Some svg rendering code
function dblclick(d) {
d3.select(this).select('circle').transition()
.duration(1000)
.attr('r', 14);
self.makeJsonBackEnd(d); // in the browser console this is not a function error
}
}
makeJsonBackEnd(node) {
// extract info from d3 node to make a JSON for backend
}
使用闭包
ngAfterViewInit() {
const self = this;
// ... Some svg rendering code
function dblclick(d) {
d3.select(this).select('circle').transition()
.duration(1000)
.attr('r', 14);
self.makeJsonBackEnd(d); // in the browser console this is not a function error
}
}
makeJsonBackEnd(node) {
// extract info from d3 node to make a JSON for backend
}
您可以尝试将dblclick方法转换为箭头函数,如下所示
dblclick = d => { .... };
或者将这个范围保存到本地变量中的传统方法。让我=this
,并使用me.makeJsonBackEnd(d)
调用该方法,如下所示
ngAfterViewInit() {
let me = this;
function dblclick(d) {
...
me.makeJsonBackEnd(d)
...
}
}
您可以尝试将dblclick方法转换为箭头函数,如下所示
dblclick = d => { .... };
或者将这个范围保存到本地变量中的传统方法。让我=this
,并使用me.makeJsonBackEnd(d)
调用该方法,如下所示
ngAfterViewInit() {
let me = this;
function dblclick(d) {
...
me.makeJsonBackEnd(d)
...
}
}
d3中的this
会不会导致fat arrow出现问题?是的,它会导致关闭。是的,它会影响,然后使用传统的解决方法,这对您很有用。d3中的this
不会导致fat arrow出现问题吗?是的,它会导致关闭。是的,它会影响,然后使用传统的解决方法,这对您来说是可行的。