【问题标题】:How to use multiple themes in a SPA using angular 5如何使用 Angular 5 在 SPA 中使用多个主题
【发布时间】:2018-10-10 11:38:11
【问题描述】:

在为单个页面应用程序集成多个主题方面需要帮助。我的 Web 应用程序有一个登录页面,它是一个 html 模板,我的应用程序的其余部分使用了另一个主题。如何避免主题样式冲突我有一个单一的索引 html 吗?问题是登录页面主题应该是我的应用程序根 URL,以及使用与登录页面主题相同样式的登录/注册页面。其余样式取决于我用于其余应用程序的其他主题。所以在这样做时,我面临着严重的风格冲突。任何帮助将不胜感激。提前致谢!

【问题讨论】:

    标签: css angular5


    【解决方案1】:

    要为特定页面封装样式,您应该使用其组件的样式表而不是全局样式表。

    如果您需要导入样式,您应该避免在全局样式表中这样做。您可以为特定组件导入外部样式,或者如果许多组件具有相同数量的共同样式表,您可以创建一个包含您需要的所有导入的通用样式表。

    这应该允许主题的灵活性。

    【讨论】:

    • 我尝试在该特定组件中添加导入,但我有一个全局样式的 styles.css 文件。因此该文件与组件 css 冲突。该 styles.css 文件已添加到 angular-cli .json 样式数组。
    • 通常组件的 CSS 优先于全局 CSS。我建议避免使用除重置或样式组件(如按钮、页眉和页脚)之外的任何全局 CSS,但在您的情况下,您可能也希望避免使用它,因为您的应用程序中有多个主题。
    • 我尝试在其自己的组件 css 文件中添加登录页面主题,但其中包含一些背景 url,这会在构建时引发错误
    • 如果您提供资产,请确保将它们放在资产文件夹中,然后给出它的相对路径。
    【解决方案2】:

    我会用 grunt/gulp 解决这个问题。将 html 和 css 与您的应用程序分开,都在自己的存储库中。将基本模板合二为一,然后让 grunt/gulp 将它们复制到部署目录。然后覆盖特定模板目录中的所有文件。假设你有这个结构;

    base-template/
      index.html
      other-template.html
    
    my-template/
      other-template.html
    

    现在,当您复制它们时,您将拥有基本模板中的 index.html 和特定模板中的 other-template.html 文件,而原始模板没有更改。

    您可以对 css 文件或任何其他资产应用类似的策略。

    【讨论】:

      猜你喜欢
      • 2018-08-01
      • 2018-06-03
      • 2018-10-14
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      相关资源
      最近更新 更多