【问题标题】:Call a method of a component which is inside of <ng-content> within its parent component调用其父组件内 <ng-content> 内的组件的方法
【发布时间】:2017-08-28 09:00:05
【问题描述】:

首先是Plunkr

基本上,我有一个动态的选项卡控件。将有任意数量的选项卡,每个选项卡都将包含一个继承自此“延迟加载”组件的组件。我希望实现的功能是,当用户单击选项卡时,它将从选项卡中包含的任何组件中调用“loadData”。

我尝试使用 @ViewChild 或 @ContentChild 访问子组件,但我尝试的任何方法似乎都不起作用。

标签的模板是:

<div [hidden]="!active" class="pane">
  <ng-content></ng-content>
</div>

在选项卡组件中的“活动”属性的设置器上,我希望调用元素中包含的任何组件的 .loadData() 方法。这可以实现吗?

【问题讨论】:

标签: angular typescript transclusion


【解决方案1】:

它对我有用

  ngAfterContentInit() {
    if(this.component) {
      this.component.loadData();
    }
  }

  @ContentChild(DelayLoadComponent) component: DelayLoadComponent;

但它不会延迟加载组件。

Plunker example

也许您想添加一个*ngIf,它只在选项卡处于活动状态时将组件添加到 DOM。

【讨论】:

  • 不幸的是,我希望延迟加载组件!
  • 但是问题不是懒加载造成的。您的应用程序不会延迟加载组件。
  • 但这就是我想通过提出这个问题来实现的目标?我知道它不会延迟加载组件 - 这就是我在这里的原因! :)
  • 你的整个问题一次都不包含lazy ;-) 有问题和答案如何在没有路由器的情况下延迟加载组件。如果您只希望组件在可见时添加到 DOM,也可以使用 *ngIf。延迟加载是从与服务器不同的(不同于初始应用程序代码文件)加载组件。
猜你喜欢
  • 2021-03-11
  • 2021-03-14
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
  • 2017-07-13
  • 2017-10-21
  • 1970-01-01
相关资源
最近更新 更多