angular - 如何编写一个与子组件具有相同标签的瘦包装器组件
问题描述
我将在下面使用一个人为的例子来描述我(有点)想要完成的事情。
假设我想在渲染或删除 Angular Material2 进度微调器时将某些内容记录到控制台。
包装:
@Component({
selector: 'mat-spinner',
template: '<mat-spinner></mat-spinner>' // This would be the OTHER mat-spinner
})
export class LoggingSpinnerComponent() implements OnInit, OnDestroy {
ngOnInit(): void {
console.log("Spinner rendered");
}
ngOnDestroy(): void {
console.log("Spinner destroyed");
}
}
请注意,我使用mat-spinner
了LoggingSpinnerComponent
's 选择器,而且,我在它的模板中使用。 mat-spinner
显然这是行不通的。
有什么办法可以做到这一点?
我可以“命名空间”MaterialProgressSpinnerModule
以便我可以使用<original-mat-spinner>
这个外部组件模板中的东西吗?
背景。
我真正想做的是编写一个跟踪器,记录用户在野外看到微调器的时间。而且,我将制作一个仪表板来突出显示我的应用程序的哪些部分正在遭受过多的微调器时间(这不一定与一个特定 API 的性能相关,因此我对这个包装器很感兴趣)。
我想使用具有相同选择器(mat-spinner)的包装器的原因是我可以换掉MatProgressSpinnerModule
并使用LoggingSpinnerModule
它,而不必触摸任何代码。
LoggingSpinnerModule
如果它被证明是一个失败的实验,它也将使将来更容易删除它。
解决方案
您实际上并不需要模板,因此您可以使用指令而不是组件:
@Directive({
selector: 'mat-spinner'
})
export class LoggingSpinnerDirective implements OnInit, OnDestroy {
ngOnInit(): void {
console.log("Spinner rendered");
}
ngOnDestroy(): void {
console.log("Spinner destroyed");
}
}
推荐阅读
- php - 从 mangopay 仪表板更新用户时调用什么 webhook?
- android - 使用 rxJava 进行表单验证是否有意义
- deep-learning - yoloV3 (AlexeyAB):速率为 0.0000
- jquery - 从一个页面导航到另一个页面时如何创建加载器不起作用
- flutter - 在 android studio 中为颤振项目禁用构建 bundle/apk
- android-videoview - android 中的任何视频播放器库都可以播放 youtube 视频和除 YoutubePlayer API 之外的普通视频吗?
- create-react-app - 'navigationBar' 已声明,但其值从未被读取。ts(6133)
- python - UnicodeDecodeError:“utf-8”编解码器无法解码位置 65535 中的字节 0xd9:数据意外结束
- reactjs - 在 React 中使用 memoized 回调,同时使用 .map 创建多个组件
- c# - 我如何跟踪在 Vuforia 引擎上运行的为 android 构建的统一应用程序被用户打开了多少次