Angular2 模块级样式表
Posted
技术标签:
【中文标题】Angular2 模块级样式表【英文标题】:Angular2 module level stylesheets 【发布时间】:2017-05-02 00:15:21 【问题描述】:我正在使用sass 以模块化结构设计我的网站,我愿意以这样一种方式组织样式表,即在每个模块级别(而不是组件级别)定义一个样式表,然后将其导入所有组件以保持整个模块的标准布局。
那么这是一个好方法吗?
如果是,是否有将 CSS 从 module.ts
文件导出到所有组件的方法。以非常相似的方式,使用providers
提供服务。这将省去我在所有组件中单独导入相同 CSS 文件的痛苦。
【问题讨论】:
【参考方案1】:假设我们在 Angular 应用程序中具有以下结构
+-- src
| +-- app
| | +-- customer
| | | +-- customer.scss
| | | +-- customer.module.ts
| | +-- product
| | | +-- product.scss
| | | +-- product.module.ts
| +-- sass
| | +-- _common.scss
| | +-- app.scss
| | +-- project-level-styles.scss
我们可以像这样设置我们的项目级 sass 文件:
@import 'common';
// project level classes
@import 'project-level-styles';
// module level classes
@import '../app/customer/customer.scss'
@import '../app/customer/product.scss'
因此,在这些 customer.scss
和 product.scss
中,我将拥有在该模块内的许多组件中通用的类。
应该注意的是,当您创建不在组件级别的样式表并将其放在其他地方(例如模块或项目目录中)时,角度处理这些样式的方式是不同的。
Angular Component Styles
Angular 可以将组件样式与组件捆绑在一起,从而实现比常规样式表更模块化的设计。您放入组件样式的选择器仅适用于该组件的模板。
所以请注意,任何与组件styleUrls
数组无关的样式表都可以应用于您网站中的任何元素(如果您不使用特异性)。它不仅适用于该模块,因此这可能不是适用于所有情况的解决方案,但这是我为我的模块所做的事情,理解这一点我可以在该模块化样式表中编写我的样式,以通过定位根来特定于该模块该模块的元素...
组件与全局
在我的应用程序中,我的 customerModule
有一个名为 customerComponent
的根组件,并且我在该 html 中有一个根元素,它的类为:
customer-container
所以在我的customer.scss
中,我可以像这样添加我所有的样式:
.customer-container .info-heading
font-size: 15px; color: #333;
.customer-container .section-divider
margin-top: 1em; border-top: 1px solid #dfdfdf;
所以我现在可以实现某种程度的特殊性,防止我的样式渗入其他项目组件。
【讨论】:
【参考方案2】:那么这是一个好方法吗?
它是主观的。 Angular 模块有助于将应用程序组织成具有凝聚力的功能块。我想要不同的样式用于不同的块功能吗?极不可能。
有没有一种方法可以将 module.ts 文件中的 CSS 导出到所有组件中。
没有。它仅在组件级别受支持。解决方法是让所有模块组件都引用单个 css 文件。另一个好的做法是将 css 模块化并在组件级别使用它们。
【讨论】:
【参考方案3】:是的。为每个组件设置不同的样式表绝对是好的方法。甚至 Angular CLI 也遵循相同的方法。 你可以看看并上手:LINK
那么这是一个好方法吗?
是的,在为 Angular 应用程序安排文件结构时,这是一个完美的方法。
如果是,是否有将 CSS 从 module.ts 文件导出到的方法 所有组件。
默认情况下,Angular CLI 不会为模块提供任何样式表,它也很有意义。为什么需要模块级别的样式表? 您可以在组件级别样式表中添加与组件相关的样式,此外,如果您愿意,您可以在项目级别拥有一个样式表,您可以在其中添加项目的所有常见样式。
【讨论】:
如果我想要模块级别的样式表而不是产品级别的样式表怎么办。由于每个模块都有单独的功能集,我愿意拥有整个模块的相同设计特征集,而不是一个组件或一个项目。 好吧,如果您非常确定在模块级别拥有它并且您有这样的要求。您可以随时添加它。 Angular 不限制在组件级别添加一个。以上是关于Angular2 模块级样式表的主要内容,如果未能解决你的问题,请参考以下文章