javascript - 如何纠正功能范围?
问题描述
在我的模板中,我使用了一些呈现步进器的第三方组件,您可以在其中在步骤之间导航:
<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>
和
export class HeaderComponent implements OnInit {
currentStep = 0;
stepChangeCallback(selectedStep) {
this.currentStep = selectedStep; // PROBLEM: this does not point to HeaderComponent
}
}
所以我想我可以用固定的 this 指针生成一个新函数:
getStepChangeCallbackFunction() {
return this.stepChangeCallback.bind(this);
}
和
[stepChangeCallback]="getStepChangeCallbackFunction()"
这确实有效,但是,我看到内存消耗不断增加,并且网站最终会使浏览器崩溃,因为它不断生成新的功能副本。
还有其他解决方案吗?
解决方案
至于我,这里最好的选择是使用实例箭头函数:
stepChangeCallback = (selectedStep) => {
...
}
您可以使用[stepChangeCallback]="stepChangeCallback.bind(this)"
,但它也会在每次更改检测运行时创建一个新函数。
另一种选择是this
在构造函数中绑定。
export class HeaderComponent implements OnInit {
constructor() {
this.stepChangeCallback = this.stepChangeCallback.bind(this);
}
stepChangeCallback(selectedStep) {
...
}
}
推荐阅读
- gradle - 如何定义 settings.gradle.kts 和 build.gradle.kts 中可用的 kotlin dsl gradle 属性?
- cloud-foundry - 在空间中的所有应用程序之间启用容器到容器网络
- python - Python:如何在 netCDF4 中使用 MFdataset
- objective-c - NSOutlineView 拖放(在项目旁边)不适用于复杂项目
- python - 如何使用 OpenCV 中的 Tkinter 显示图像
- laravel - Laravel 5.6 - 404 虽然定义了路由
- c - 将数字分配给C中的char变量?
- javascript - Javascript/Angular Basics - 从范围中读取一个简单的值
- javascript - 使用 jQuery 的类和值不为空的所有选择列表选项
- swift - 如何子类化 AVCaptureInput 和 AVCaptureInput.Port?