angular - ngOnInit 在 Angular 5 的所有继承类中多次调用
问题描述
我使用 import {Ng2StateDeclaration} from '@uirouter/angular'; 我现在在 Angular 5 中遇到了一个问题,我有没有模板的 Paper 类:
export class Paper implements OnInit {
ngOnInit(): void {
// async function here
this.loadData();
}
}
现在我有另一个名为 PaperEdit 的类:
export class PaperEdit extends Paper{
constructor(){super();}
}
在 PaperEdit 类中,我有很多带有长 html 的部分:paper-edit.html
<paper-edit-form-1></paper-edit-form-1>
<paper-edit-form-2></paper-edit-form-2>
<paper-edit-form-3></paper-edit-form-3>
PaperEditForm1,2,3 是一个只有 html 文件的类,没有逻辑,我想继承 Paper 类的所有变量和函数,如 PaperEdit
export class PaperEditForm1 extends Paper {
constructor(){super();}
// no function here`
}
结果是: Paper 类的 ngOnInit 运行了 4 次,这意味着 this.loadData() 也运行了 4 次。因此,任何防止此问题的方法,我希望该生命周期只运行 1 次!谢谢。
解决方案
我遇到过类似的问题。不要在 PaperEditForm1 类中继承 Paper 类,只需将函数loadData 设为静态。在子 PaperEditForm1 类中导入 Paper 类。现在,只需使用Paper.loadData()调用 loadData 静态函数.这最小化了构造函数调用并删除了继承。它仅在需要时进行调用。这解决了我的情况。
推荐阅读
- javascript - 如何将图像、名称和文件大小附加到表 td 作为 href
- angular - 测试图像加载事件Angular 5
- python - 无法根据 python 中的用户输入从 csv 表中过滤数据
- javascript - 将对象作为参数的函数
- mysql - 使用 MVC 5 的 MySql 身份
- git - 将现有代码推送到 VSTS 时我做错了什么
- arrays - 如何将 CSV 文件放入 bash 中的数组中?
- spring-integration - 使用带有 Spring 集成的 http 下载文件
- ios - 如何减少 iOS 应用的 Core ML 模型?
- sql - Sqlite 数据库 - 属性作为表与列?