【发布时间】:2017-12-09 07:53:30
【问题描述】:
我对新的ng-content 嵌入有疑问。
假设我有一个组件my-component,它在其ngOnInit() 函数中执行一些繁重的负载操作(目前,只是一个console.log())。
我有一个包装器,它通过嵌入 (my-wrapper.component.html) 显示内容。
<ng-content></ng-content>
如果我这样设置环境,日志语句不会显示:
<my-wrapper *ngIf="false">
<my-component></my-component>
</my-wrapper>
我假设,my-wrapper 组件没有构建,所以内容被忽略了。
但如果我尝试将逻辑移动到像这样 (my-wrapper.component.html) 的 my-wrapper 组件中:
<ng-container *ngIf="false">
<ng-content></ng-content>
</ng-container>
我总是看到console.log() 输出。我猜,my-component 被构建然后存储起来,直到 *ngIf 在 my-wrapper 中变为 true。
目的是构建一个通用的“列表项+详细信息”组件。假设我有一个 N 个概览元素 (my-wrapper) 的列表,它们在 *ngFor 循环中呈现。这些元素中的每一个都有自己的详细信息组件 (my-component),一旦我决定向特定项目显示更多信息,它就会加载自己的数据。
overview.html:
<ng-container *ngFor="let item of items">
<my-wrapper>
<my-component id="item.id"></my-component>
</my-wrapper>
</ng-container>
我的包装器.component.html:
<div (click)="toggleDetail()">Click for more</div>
<div *ngIf="showDetail">
<ng-content></ng-content>
</div>
有没有办法告诉 Angular,在需要添加到页面之前忽略转入的内容?类似于 AngularJS 中的情况。
【问题讨论】:
-
我建议不要在包装器上添加条件,而是将条件添加到子组件以停止执行
标签: html angular typescript angular2-template