Условный шаблон слота в ng-template

Есть ли способ условно показать слоты в угловом шаблоне? Я хочу включить содержимое, если оно есть, и показать содержимое по умолчанию в противном случае.

Допустим, есть my-card компонент, с шаблоном, как это:

<my-card>
  <ng-content select="[card-body]"></ng-content>
  <div *ngIf="!card-body">Default text</div>
</my-card>

Тогда использование (скажем, в компоненте приложения) будет таким:

<!-- This will show the card body -->
<my-card><div card-body>This is card body</div></my-card>
<!-- This will show the default text -->
<my-card></my-card>

Если это не будет работать со слотами, каковы мои альтернативы?

1 ответ

Решение

Вы можете создать директиву с помощью селектора card-body,

@Directive({selector: '[card-body]'})
export class CardBodyDirective {
}

Затем в my-card компонент, используйте его следующим образом

@Component({
  selector: 'my-card',
  template: `
    <div class="card">
      <ng-content select="[card-body]"></ng-content>
      <div *ngIf="!cardBody">Default text</div>
    </div>
  `
})
export class MyCardComponent  {
  @ContentChild(CardBodyDirective) cardBody;

}

Не забудьте объявить CardBodyDirective и экспорт в тот же модуль.

Вы можете взглянуть на этот стек

Другие вопросы по тегам