如何纠正功能范围?

use*_*875 2 javascript angular

在我的模板中,我使用了一些渲染步进器的第三方组件,您可以在这些组件之间进行导航:

<my-stepper step="{{ currentStep }}" steps-label="steps"
   [stepChangeCallback]="stepChangeCallback">
   <my-stepper-step>First</my-stepper-step>
   <my-stepper-step>First</my-stepper-step>
   <my-stepper-step>First</my-stepper-step>
</my-stepper>
Run Code Online (Sandbox Code Playgroud)

export class HeaderComponent implements OnInit {
   currentStep = 0;

   stepChangeCallback(selectedStep) { 
     this.currentStep = selectedStep; // PROBLEM: this does not point to HeaderComponent
   }
}
Run Code Online (Sandbox Code Playgroud)

所以我想我可以使用固定的this指针生成一个新函数:

getStepChangeCallbackFunction() {
   return this.stepChangeCallback.bind(this);
}
Run Code Online (Sandbox Code Playgroud)

[stepChangeCallback]="getStepChangeCallbackFunction()"

这确实有效,但是,我看到内存消耗不断增加,并且该网站最终会导致浏览器崩溃,因为它不断生成新的功能副本。

还有其他解决方案吗?

yur*_*zui 6

对于我来说,最好的选择是使用实例箭头功能

stepChangeCallback = (selectedStep) => { 
  ...
}
Run Code Online (Sandbox Code Playgroud)

您可以使用,[stepChangeCallback]="stepChangeCallback.bind(this)"但每次运行更改检测时,它也会创建一个新功能。

另一个选择是绑定this到构造函数中。

export class HeaderComponent implements OnInit {   
  constructor() {
    this.stepChangeCallback = this.stepChangeCallback.bind(this);
  }

   stepChangeCallback(selectedStep) { 
     ...
   }
}
Run Code Online (Sandbox Code Playgroud)