【问题标题】:Angular2 module level stylesheetsAngular2 模块级样式表
【发布时间】:2017-05-02 00:15:21
【问题描述】:

我正在使用 以模块化结构设计我的网站,我愿意以这样一种方式组织样式表,即在每个模块级别(而不是组件级别)定义一个样式表,然后将其导入所有组件以保持整个模块的标准布局。

那么这是一个好方法吗?

如果是,是否有将 CSS 从 module.ts 文件导出到所有组件的方法。以非常相似的方式,使用providers 提供服务。这将省去我在所有组件中单独导入相同 CSS 文件的痛苦。

【问题讨论】:

    标签: sass css angular sass


    【解决方案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.scssproduct.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 不限制在组件级别添加一个。
        猜你喜欢
        • 2020-06-16
        • 2019-06-28
        • 1970-01-01
        • 2016-11-19
        • 1970-01-01
        • 2016-04-14
        • 2013-02-04
        • 2013-02-17
        • 2016-06-16
        相关资源
        最近更新 更多