angular - 子组件在不同父组件中时的样式不同
问题描述
在 Angular 5 应用程序中,当子组件位于下面的不同父组件列表中时,我希望子组件的样式略有不同。
例如列表组件下卡片的红色背景
列表详细信息组件下的卡片绿色背景
我想知道我是否可以通过子组件中的 scss 来做到这一点?因为我认为在子组件本身内部进行跟踪会更容易。
<listing>
<card />
<listing/>
<listingDetail>
<card />
</listingDetail>
谢谢。
解决方案
如果你想影响其子组件的样式,你可以使用 Angular 的ng-deep 。
1.) 在您的 ListingComponent 上,设置 ng-deep 并访问卡片容器类
@Component({
selector: 'listing',
template: `<ng-content></ng-content>`,
styles: [
`
:host ::ng-deep .card-container { background-color: red; } // Keep in mind, to include :host which means this component as without it, this style will leak out affecting not only its child component class .card-container but also its siblings derived from another component
`
]
})
export class ListingComponent {}
2.) 在您的 ListingDetailComponent 上,设置 ng-deep 并访问卡片容器类
@Component({
selector: 'listing-detail',
template: `<ng-content></ng-content>`,
styles: [
`
:host ::ng-deep .card-container { background-color: green; }
`
]
})
export class ListingDetailComponent {}
3.) 在您的 CardComponent 上,假设您有一个卡片容器类
@Component({
selector: 'card',
template: `<div class="card-container">Hi I'm Card</div>`,
})
export class CardComponent {}
4.)在您的 AppComponent 上,与您的结构相同
<listing>
<card></card>
</listing>
<listing-detail>
<card></card>
</listing-detail>
这是 StackBlitz 演示链接供您参考
或者如果你想控制子组件的样式,你可以通过指定:host-context和父类来实现。
例子:
1.)指定我们将用于从我们的子组件(卡片)访问的父类
<listing class="list-parent">
<card></card>
</listing>
<listing-detail class="list-detail-parent">
<card></card>
</listing-detail>
2.) 在您的子组件 (CardComponent) 上,在您的样式中指定主机上下文。通过这种方式,您可以将父组件的样式设置为与它们的类相对应。
@Component({
selector: 'card',
template: `<div class="card-container">Hi I'm Card</div>`,
styles: [
`
:host-context(.list-parent) { background-color: red; }
:host-context(.list-detail-parent) { background-color: green; }
`
]
})
export class CardComponent {}
推荐阅读
- wix - windows安装程序中系统还原点的真正用途是什么?
- python - 如何使用 pyqt4 刷新小部件中的内容?
- mongodb - '无法获取本地颁发者证书'通过 ssl 访问 mongodb 时使用通过使用 ACME 服务器签署证书获得的证书
- excel - 在查找找到的列上使用 SUMPRODUCT
- excel - 根据excel单元格值重命名工作表
- rest - 为什么我在 Rest Client 中测试了 Response 有效负载时总是出现 400 格式错误?
- c# - 如何在 Xamarin.Forms 中显示可以在 IOS 和 Android 上显示阈值的详细弹出窗口和水平线的折线图?
- javascript - Javascript 查找所有“\”并替换为“/”
- php - 获取要更新的页面名称时遇到问题
- python-3.x - 使用多处理时进程冻结