javascript - ng-template 中的组件初始化
问题描述
我ng-content
用来将一个 Angular 组件包装在另一个组件中。外部组件应该完全控制何时渲染内部组件。但是,我遇到了一个我不明白的情况。外部组件使用如下模板(简化):
<ng-template>
<ng-content></ng-content>
</ng-template>
据我了解,内容根本不应该被渲染,因为它包含在ng-template
. 在这个例子 stackblitz中,你可以看到内部组件没有被渲染,但它仍然被初始化。内部组件的 OnInit 中的控制台日志仍然显示在控制台中。
我的问题是:
- 为什么会这样?
- 在这种情况下如何避免组件初始化?
解决方案
Angular 文档有关于结构指令的信息:它只是呈现或不呈现模板, - 没有关于内部加载组件的详细信息。
其次,您将已编译和渲染的对象传递给ng-content
.
如果要lazy
加载模板,只需传递模板:
<app-outer>
<ng-template>
<app-inner></app-inner>
</ng-template>
</app-outer>
和
外部组件.html
<ng-content></ng-content>
<ng-template [ngTemplateOutlet]="template"></ng-template>
外部组件.ts
@Component({
selector: 'app-outer',
templateUrl: './outer.component.html'
})
export class OuterComponent {
@ContentChild(TemplateRef) template: TemplateRef<unknown>;
}
推荐阅读
- python - 给定参数时没有参数错误
- javascript - 如何处理未触发“点击”事件的按钮按下?
- javascript - 使用点击事件进行模拟 - 在 IE 11 中不起作用
- javascript - axios POST请求,body数据具体传不被识别
- matlab - R2020b:App Designer 说如果条件无法打开文件 MATLAB 失败
- c# - 如何配置一对多引用相同的主体?
- android - 缺少 Google Play 结算库
- dns - 在 Windows 10 中处于 nslookup 模式时有关命令“root”的 Nslookup 问题
- amazon-web-services - 将 CloudFormation 上的 CSV 输入到数组中
- html - 根据 div 中的可用空间自动放置图像