angular - 基于位置的 Angular 2 组件模板上的自定义 CSS 类
问题描述
我们的团队正在将我们的代码库迁移到 Angular 2,并负责 CSS 开发/组织,我研究了在 Angular 2 中添加样式的选项以及 Angular 2 如何改变我们构建 UI 的方式。我们的许多 UI 元素都是组件。我想做的一件事是将自定义 CSS 类添加到组件模板中的父元素,具体取决于它出现的位置。这是一个示例 UI 元素:
<button class="basic-button">
Some action text
</button>
这将存在于一个名为basic-button.component.html
. 它的组件选择器是basic-button
. 假设按钮出现在客户的帐户设置页面中,并且设计需要与我们的默认值不同的文本颜色值。我们想为按钮元素添加一个修饰符 CSS 类:
<button class="basic-button--alert basic-button">
Some action text
</button>
但是如果相同的按钮也出现在产品页面中并且需要另一个颜色值,我们需要应用不同的修饰符类:
<button class="basic-button--warning basic-button">
Some action text
</button>
有没有办法根据按钮元素的出现位置将自定义类附加到按钮元素?将类应用到实际的 HTML 元素很重要,因为将其应用到组件选择器可能不会正确影响样式,如在本例中按钮的文本颜色。由于特定原因,我们不打算对 CSS 进行范围界定,所以理论上我们可以使用嵌套来实现我们的目标:
.account-settings .basic-button {
color: red;
}
.product-details .basic-button {
color: orange;
}
但我们更喜欢尽可能减少嵌套。
解决方案
使用激活路由的想法很好。我将创建一个自定义按钮组件,其中包含按钮,您可以继承要应用的属性并使用HostBinding根据激活的路由在自定义组件上应用类。
或者(对我来说感觉有点 hacky)你可以创建一个指令,你可以将它应用到本机按钮组件,然后使用 Angular Renderer以便根据激活的路由在按钮上应用类。
推荐阅读
- prometheus - 计数器的普罗米修斯最大限制
- oracle - 在 Oracle 中将一个复合主键更新为空
- javascript - 检测移动用户和桌面是否相同
- android - NestedScrollView 在滚动时不听
- css - 如何在 React js 中使用引导程序使 Grid 响应?
- javascript - 使用R从js源或HTML标签中提取值?
- r - 计算测试集的 AUC(R 中的 keras 模型)
- oracle - 我可以在 PL/SQL 中返回一个函数吗?
- c++ - CMake 与 Eigen 的链接错误“CMake 无法确定目标的链接器语言”
- python - 如何使用 CNN 预测孔的中心坐标