我有一个定制的组件<ui-title>
,我希望根据它的直接父元素设置不同的样式。
例如,如果它出现在<ui-section>
中,则将其设置为YELLOW。如果它出现在<ui-card>
中,则将其设置为BLUE。如果它出现在其他位置,则将其设置为绿色。
以下是我的尝试:
:host {
background-color: green;
}
:host-context(ui-card) {
background-color: blue;
}
:host-context(ui-section) {
background-color: yellow;
}
这不起作用,因为如果一个元素同时嵌套在<ui-section>
和<ui-card>
中,两组样式都会被应用,我希望应用一组严格基于:host元素的直接父元素的样式。
这是一个StackBlitz,显示了我的问题。
1条答案
按热度按时间tjrkku2a1#
经过几个小时的搜索和尝试
::ng-deep
、:host
和:host-context
的不同组合后,我发现可以从这个answer合并:host
和::ng-deep
。https://stackblitz.com/edit/angular-ivy-yf1uff?file=src/app/ui-title/ui-title.component.css
因此,只需将与
ui-card
和ui-section
相关的样式移到它们自己的样式表中,并使用子选择器>
合并:host
和::ng-deep
用户界面卡组件css
用户界面部分.组件. css
用户界面标题.组件. css