【问题标题】:How to select content from inner children in ng-content如何从 ng-content 中的内部子项中选择内容
【发布时间】:2019-01-11 13:58:59
【问题描述】:

我有一个名为 tab 的组件,其中包含 <ng-content select="[tabItem]"></ng-content>

有时tabItem 在其他子组件中。我的问题是 Angular 从直接子项中选择内容,而不是内部子项(app-my-tab),有什么办法吗?

app.component.html

<app-tabs>
    <div tabItem>
        Tab 1
    </div>
    <div tabItem>
        Tab 2
    </div>
    <app-my-tab></app-my-tab>
</app-tabs>

my-tab.component.html

<div tabItem> 
  My Tab
</div>
<div>
  Other content
</div>

看到这个stackblitz

【问题讨论】:

    标签: javascript angular angular2-ngcontent


    【解决方案1】:

    深度选择没有解决方案。 我认为这是合乎逻辑的,因为:

    1. 轻松理解真实代码
    2. 易于调试。

    如果你真的想这样做,请在 app-my-tab 中使用 *ngIf

    使用*ngIF

    1. app-tabs 中的所有元素都必须具有tabItem 属性
    2. 发送您的条件以在app-my-tab 组件中显示/隐藏一些其他元素。和app-my-tab 将其作为@Input() 属性接收
    3. app-my-tab html 中使用*ngIf 显示或隐藏某些元素

    示例: https://stackblitz.com/edit/deep-ng-content-2gyttv?file=src/app/app.component.html

    【讨论】:

    • 我的目标是在那里显示所有 3 个选项卡,我不知道 ngIf 是如何解决问题的,请您分叉 stackblitz 并在那里提出您的解决方案
    • 但是如果目标不是另一个组件的子组件怎么办?意思是,&lt;ng-content select="#parent .child"&gt;&lt;/ng-content&gt; 旁边是 &lt;div id="parent"&gt;&lt;span class="child"&gt;&lt;/span&gt;&lt;/div&gt;
    • 您必须以某种方式将内容模板发送到组件,该组件将显示选项卡。然后使用 *ngTemplateOutlet 渲染模板。 (&lt;ng-container *ngTemplateOutlet="templateRefOfContent"&gt;&lt;/ng-container&gt;)
    猜你喜欢
    • 2019-03-04
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2020-01-09
    • 1970-01-01
    • 2016-10-18
    相关资源
    最近更新 更多