Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 解析typescript的另一个私有方法中函数内的私有方法调用的范围_Angular_Typescript - Fatal编程技术网

Angular 解析typescript的另一个私有方法中函数内的私有方法调用的范围

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

框架:角度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 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出现问题吗?是的,它会导致关闭。是的,它会影响,然后使用传统的解决方法,这对您来说是可行的。