Как я могу получить имя слота, в котором отображается компонент

#spartacus-storefront

#spartacus-storefront

Вопрос:

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

Ответ №1:

Вы можете ввести предка PageSlotComponent в свой пользовательский компонент и получить имя слота, обратившись к его общедоступному свойству position$: Observable<string> :

 export class CustomComponent {
  constructor(@Optional() protected pageSlotComponent: PageSlotComponent) {}
  /*...*/

  slot$ = this.pageSlotComponent.position$;
}
 

Объяснение:

  • В Angular вы можете ввести ближайший родительский компонент заданного типа, передав его как зависимость конструктора.
  • Возможно, вам захочется добавить @Optional() декоратор, если вы планируете использовать свой компонент вне слота содержимого (т. Е. Как статический компонент). Это поможет избежать сбоя приложения во время выполнения, но просто PageSlotComponent безопасно разрешит экземпляр до нуля.

Комментарии:

1. Большое вам спасибо. Позиция $ observable защищена, но получатель «position» этого класса предоставляет значение защищенной наблюдаемой.