#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» этого класса предоставляет значение защищенной наблюдаемой.