首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角材料嵌套手风琴模板被拿起我的父手风琴

角材料嵌套手风琴模板被拿起我的父手风琴
EN

Stack Overflow用户
提问于 2020-06-12 00:17:33
回答 1查看 2.3K关注 0票数 1

我有一个嵌套在另一个手风琴中的mat-accordion,我想直接呈现父手风琴的内容,但是延迟加载子手风琴。通过将手风琴内容包装在带有matExpansionPanelContent指令注释的ng模板中,提供了用于延迟加载的角度材料。

我的代码如下所示:

代码语言:javascript
复制
<mat-accordion>
  <mat-expansion-panel>
    <mat-expansion-panel-header>
      Panel 1
    </mat-expansion-panel-header>

    <div class="panel-content">

      Immediately loaded parent content

      <mat-accordion displayMode="flat">
        <mat-expansion-panel>
          <mat-expansion-panel-header>
            Panel 1A
          </mat-expansion-panel-header>

          <ng-template matExpansionPanelContent>
            Lazy-loaded child content
          </ng-template>

        </mat-expansion-panel>
        <mat-expansion-panel>
          <mat-expansion-panel-header>
            Panel 1B
          </mat-expansion-panel-header>

          <ng-template matExpansionPanelContent>
            Lazy-loaded child content
          </ng-template>

        </mat-expansion-panel>
      </mat-accordion>
    </div>
  </mat-expansion-panel>
  <mat-expansion-panel>
    <mat-expansion-panel-header>
      Panel 2
    </mat-expansion-panel-header>

    <div class="panel-content">
      Immediated loaded parent content
    </div>
  </mat-expansion-panel>
</mat-accordion>

相反,所发生的是父手风琴和子手风琴拾取和呈现延迟加载的内容,因此它会被呈现两次。

是否有一种将延迟加载的内容直接传递给面板的方法,以便只有该特定面板呈现内容?或者更好的方法我能做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2020-06-12 00:17:33

最初,我使用的工作是延迟加载父内容和子内容,但这并不理想,因为父内容的延迟加载导致了一些我不想要的行为。

实际上,最好向父面板添加一个空的MatExpansionPanelContent模板。

为了了解发生了什么,我仔细查看了源代码,发现它们只是使用ContentChild装饰器来选择模板:

代码语言:javascript
复制
@ContentChild(MatExpansionPanelContent) _lazyContent: MatExpansionPanelContent;

这将选择第一个模板,其中应用了它在其作用域中遇到的MatExpansionPanelContent指令。添加一个空的可以满足父程序对ContentChild的搜索,因此它停止查找,也找不到子模板。

以下是代码:

代码语言:javascript
复制
<mat-accordion>
  <mat-expansion-panel>
    <mat-expansion-panel-header>
      Panel 1
    </mat-expansion-panel-header>

    <!-- Added empty template -->
    <ng-template matExpansionPanelContent></ng-template>

    <!-- Rest of the parent content is eagerly-loaded -->
    <div class="panel-content">
      Immediately loaded parent content

      <mat-accordion displayMode="flat">
        <mat-expansion-panel>
          <mat-expansion-panel-header>
            Panel 1A
          </mat-expansion-panel-header>

          <ng-template matExpansionPanelContent>
            Lazy-loaded child content
          </ng-template>

        </mat-expansion-panel>
      </mat-accordion>
    </div>
  </mat-expansion-panel>
</mat-accordion>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62335573

复制
相关文章

相似问题

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