首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ng-当存在嵌套组件时,从父范围转换的内容

ng-当存在嵌套组件时,从父范围转换的内容
EN

Stack Overflow用户
提问于 2017-07-24 05:50:24
回答 2查看 3.4K关注 0票数 3

使用角2/4,我有一个复杂的页面模板。

假设我有三个相互嵌套的组件:page.component、该header.component内部和带有适当设置自定义选择器的header.title.component内部。

page.component html模板:

代码语言:javascript
复制
<layout-header></layout-header>
...

header.component html模板:

代码语言:javascript
复制
<section class="dynamic-content" *ngIf="!collapsed" #dynamicContent>
  <layout-header-title></layout-header-title>
  ...
</section>

header.title.component html模板:

代码语言:javascript
复制
<ng-content selector="card-layout-title"></ng-content>

然后,在我的实际页面模板上:

代码语言:javascript
复制
<layout-page>
  <card-layout-title>Title goes here</card-layout-title>
</layout-page>

ng-content selector="card-layout-title"只在直接父组件是要选择的标签内的组件时才能工作,也就是说,从header.title.component中,我无法选择2级嵌套组件,以找到要转换为card-layout-title的内容。

我如何做到这一点(最好不向每个级别添加和传递模板引用,因为每个级别都有5-10个嵌套组件)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-24 15:26:06

首先,它是<ng-content select=".card-layout-title"></ng-content>而不是<ng-content selector=".card-layout-title"></ng-content>;考虑到缺乏文档,很容易出错。

从我的测试来看,使用Transclusion角2/4首先取代顶级内容,因此当它到达ng-content选择器时,.card-layout-title元素就不再存在了。因此,我建议解决这个问题的方法是使用嵌套的ng-content元素“遍历”顶级内容。柱塞

票数 4
EN

Stack Overflow用户

发布于 2017-07-24 23:25:44

我将这个附加信息从@dohpaz42的答案中分离出来,因为它与一般用例的相关性要小得多。

如果你的继承人是,而不是完全平坦。

代码语言:javascript
复制
<layout-dyn-page>
  <layout-header>
    <layout-title>Title</layout-title>
    <layout-summary>Summary</layout-summary>
  <layout-header>
</layout-dyn-page>

上面的解决方案将无法工作,因为ng-content select=没有选择不在顶层的元素。当你试着向下投射它们时,不管你怎么尝试,你都用包装标签投射它们,所以目前选择嵌套在标签中的元素似乎是不可能的。你必须把它压平。

代码语言:javascript
复制
<layout-dyn-page>
  <layout-title>Title</layout-title>
  <layout-summary>Summary</layout-summary>
</layout-dyn-page>

这很可能是一个错误(或缺少功能)的角度,但目前(没有文档),我们无法知道。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45273437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档