在 Angular 指令中查找嵌套组件

Posted

技术标签:

【中文标题】在 Angular 指令中查找嵌套组件【英文标题】:Find nested components in Angular directive 【发布时间】:2018-08-08 20:30:43 【问题描述】:

我在 Angular 4 中遇到问题。我有一个具有以下结构的子页面:

<div tableOfContents>
    <page></page>

    <static-page>
        <page></page>
    </static-page>

    <dynamic-page>
        <page></page
    </dynamic-page>
</div>

我想在 tableOfContents 指令中收集所有 Page 组件。我试过@ContentChildren (Page, descendants: true),但它只给我一个来自&lt;div tableOfContents&gt;的直接孩子,有什么办法吗?静态页面和动态页面将在页面上动态添加/删除。 @ViewChildren(Page) 返回未定义

【问题讨论】:

plunker 以便更好地了解问题plnkr.co/edit/OxFk64xFhX09ArB0O8hd?p=preview 感觉是XY Problem。您不是在询问您要解决的问题;相反,您问的是一个不起作用的解决方案,它被用来解决一些未知问题。 “收集”所有Page 组件到底有什么意义? 【参考方案1】:

据我所知,您只有一个选择,因为您无法查询进入子组件的组件。

您可以做的是将page 实例存储在服务中,然后在您的tableOfContents 指令中从那里获取它们。

这样就足够了:

import Injectable from '@angular/core';

import PageComponent from '<path-to-page>';

@Injectable()

export class PageInstancesService 

  public instances = [];

  constructor() 

然后在你的 page 组件中你会这样做:

constructor(
  private pis: PageInstancesService
) 

ngOnInit() 
  this.pis.instances.push(id: <some-unique-id>, instance: this);

推送一个新实例。要在销毁实例后删除它,您将添加 ngOnDestroy:

ngOnDestroy() 

  const i = // Function to get instance index in array goes here

  this.pis.instances.splice(i, 1);

【讨论】:

以上是关于在 Angular 指令中查找嵌套组件的主要内容,如果未能解决你的问题,请参考以下文章

angularjs2 学习笔记 组件

Firebase列表的嵌套Angular2 ngFor指令[重复]

angularjs2 学习笔记 组件

前端小白之每天学习记录----angula2--

Angular2嵌套模板驱动表单

在嵌套组件中嵌套 Angular 组件