我想问一点小小的问题,让我的大脑开箱即用。如何动态设置Angular 2+组件的复杂CSS?
语境
角4使用角CLI和AOT。
https://angular.io/docs/ts/latest/guide/component-styles.html中提到的所有方法都描述了在开发人员编写组件时设置复杂CSS的方法。
组件创建后,角允许调整个人风格,甚至在组件,请你,所有使用[ngClass]
,<div [class.something]="condition">
,各种@HostBinding
装饰和一些其他的方法指定不同的CSS类的标签名称。
但是,以上都不能更改组件正在使用的CSS声明。上述方法可以(a)使用开发人员定义的样式表中已有的内容,或者(b)将单独的CSS属性设置为组件模板中的单个HTML标签。
问题
我将如何更新运行时整个组件的CSS,以便在该组件响应所有元素到新的CSS?
假设我为div.someClass引入了一种新风格,并且我希望所有匹配元素div.someClass能够反映新风格。
Plunker
我尝试的展示是在这里:https://plnkr.co/edit/N2C40cSb7hd1AyOxWWdT
的按钮应该是红色的基础上,MyChildComponent.styles
我想我明白为什么它不工作的价值我期望的方式:简而言之,样式是在编译期间在组件中构建的,而不是运行时,包括在模板中<style />
标签内发现的样式。
但知道它为什么不起作用并不能帮助我使它工作。
任何帮助高度赞赏。
谢谢您的回复。不幸的是,它证实了我害怕的东西。我将不得不将样式分配给我想要修改的所有按钮。我希望在我的用例中将自定义样式应用于数百个HTML标记(例如,列出数百个缩略图图像时,希望更改其边框的CSS)。以这种方式分配样式很可能会影响性能。但我会测试这种方法。 –
@JanKlan您可以将css类应用于其组件中的按钮,而不是通过@Input()传递它。为此寻找ngClass。可以移动你的CSS吗? – brijmcq
这没有帮助,因为我的目标是在创建组件后更改CSS类定义,而不是为元素分配动态类名 - 当然,这很好。看起来我运气不好。 –