ng-контент внутри ng-шаблона появляется только в одном ng-контейнере - PullRequest
1 голос
/ 02 апреля 2019

Я создаю флип-панель.Панель состоит из трех частей.

  • панель инструментов панели
  • панель передней панели
  • панель задней панели

Панель инструментов имеет фиксированную часть, кнопку флип.

В моем flip-panel.component у меня есть ng-шаблон для панели инструментов, потому что панель инструментов должна быть показана с обеих сторон и должна бытьтак же.Но я использую также ng-контент в этом шаблоне для извлечения пользовательских элементов для панели инструментов.

Мой flip-panel.component:

<div class="flip-panel">

  <div class="front-container">
    <ng-container [ngTemplateOutlet]="headerTemplate"></ng-container>
    <ng-content select="panel-front"></ng-content>
  </div>

  <div class="back-container">
    <ng-container [ngTemplateOutlet]="headerTemplate"></ng-container>
    <ng-content select="panel-back"></ng-content>
  </div>

</div>

<!-- template used in both container front and back -->
<ng-template #headerTemplate>
  <div class="flip-panel-header">
    <span>
      <ng-content select="panel-tool-bar"></ng-content>
    </span>
    <span class="flip-button" aria-hidden="true" (click)="toggle()">[Flip]</span>
  </div>
</ng-template>

Проблема, с которой я столкнулсяв том, что определенные пользователем элементы на панели инструментов (выбранный контент на панели инструментов панели) отображаются только на оборотной стороне.

Вот полный пример: https://stackblitz.com/edit/angular-fsnww2?file=src%2Fapp%2Fapp.component.html

1 Ответ

2 голосов
/ 02 апреля 2019

вы можете использовать проекцию контента только один раз, и вы пытаетесь загрузить заголовок в обоих через ng-контент. Убедитесь, что, например, с * ngIf, контент проецируется только один раз.

Код для рабочего примера:

<div class="flip-panel">
  <div class="front-container">
    <ng-container *ngIf="flipped" [ngTemplateOutlet]="headerTemplate"></ng-container>
    <ng-content select="panel-front"></ng-content>
  </div>

  <div class="back-container">
    <ng-container *ngIf="!flipped" [ngTemplateOutlet]="headerTemplate"></ng-container>
    <ng-content select="panel-back"></ng-content>
  </div>
</div>
...