【问题标题】:Angular - content projection / passing async data to projected contentAngular - 内容投影/将异步数据传递给投影内容
【发布时间】:2018-01-30 18:22:14
【问题描述】:

我有一个页面主页,其中包含一个名为InfiniteList 的组件。数据以 Observable[] 的形式提供,在 ionViewDidLoad() 中称为 events$HomePage。然后将events$ 数组传递给无限列表,如下所示:

<infinite-list [content]="events$ | async"></infinite-list>

在无限列表模板中,我使用不同的组件来形成列表:

<event-item *ngFor="let eventItem of content" [eventItem]="eventItem"></event-item>

这是完美的工作。但我不想将event-item 硬连线到infinite-list,这样我就可以将无限列表组件用于不同的子组件(例如事件项、事件项小或其他一些列表)。所以我尝试使用内容投影:

<infinite-list [content]="events$ | async">
    <event-item *ngFor="let eventItem of content" [eventItem]="eventItem"></event-item>
</infinite-list>

我在无限列表组件模板中添加了一个&lt;ng-content&gt;&lt;/ng-content&gt; 标签,它也可以正常工作。我想我理解内容投影的概念。但是&lt;event-item&gt; 的列表没有被渲染,因为content 在渲染时不知何故不可用。

所以我想我不能说let eventItems of content。就像我会在 infinite-list 组件本身内部一样。

【问题讨论】:

  • 您可以在组件的装饰器中设置 exportAs 属性,然后将结果保存在可以迭代的模板变量中。

标签: javascript angular ionic-framework ngrx


【解决方案1】:

您可以执行以下操作:

在您的 infinite-list 组件装饰器中,添加一个 exportAs 属性。

然后在你的模板中:

<infinite-list #component="valueOfExportAs" [content]="events$ | async">
    <event-item *ngFor="let eventItem of component.content" [eventItem]="eventItem"></event-item>
</infinite-list>

更多信息可以在这里找到:

Article about exportAs

在这篇文章的“模板引用”下可以看到更好的方法:

ng-template, ng-container, ngTemplateOutlet

【讨论】:

  • 感谢工作。只是为了完整性:我不得不使用"let eventItem of content.content"。我现在有这样的:&lt;infinite-list #list="valueOfExportAs" [content]="events$ | async"&gt; &lt;event-item *ngFor="let eventItem of list.content" [eventItem]="eventItem"&gt;&lt;/event-item&gt; &lt;/infinite-list&gt;
  • @malua 我编辑了我的答案以包含它。我还添加了一个链接,指向您可以考虑的更高级技术。
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 2020-03-21
  • 2016-10-24
  • 2019-09-23
  • 1970-01-01
  • 2018-08-06
  • 2019-04-19
  • 1970-01-01
相关资源
最近更新 更多