【发布时间】:2019-07-05 12:05:11
【问题描述】:
在 Angular 7 应用程序的单独子模块中加载自定义 Angular Material 2 主题时出现问题
我有 angular wrapper 模块(app 模块)和许多独立的延迟加载子模块。每个子模块的行为就像一个完全独立的应用程序,需要自己的角度材质主题。
我已经为每个子模块创建了自定义主题,并尝试在每个组件的 .scss 文件中使用相对路径引用自定义主题。
一些 Material 组件应用自定义主题(按钮),而一些(mat-form-field)只采用 style.scss 中指定的主题。
我可以避免这种情况的一种方法是将每个自定义主题包含在 angular.json 的“样式”数组中,但恐怕通过这样做,每个独立的子模块(应用程序)都必须加载每个主题'编译.css,它会是开销。
这个或任何更好的解决方案是否有任何已知问题?
home-app.component.scss:
@import './theme.scss';
VS.
angular.json
...
"styles": [
"src/styles.scss",
"src/app/orgs/home/theme.scss" // <-- FIXED BY ADDING THIS
],
...
预期: home-app.component.scss 中声明的主题将被加载并应用于 home-app.component.html 中使用的每个材质组件
实际: 如果我不将"src/app/orgs/home/theme.scss"添加到angular.json中,styles.scss 将应用于 home-app.component.html 中使用的一些材质组件,而某些材质组件将使用 home-app.component.scss 中指定的导入主题em>
【问题讨论】:
-
在根组件级别注意到方括号中的共享 css 或 scss。 stackoverflow.com/questions/35702164/…
-
还有 angular.io 中的共享 ngmodules angular.io/guide/sharing-ngmodules 它可能是一个很好的资源。
-
我注意到的一件事是当我添加另一个模块时,其中没有任何内容,我的子模块使用对话框和一些按钮在厌倦了许多其他事情后开始神奇地工作。奇怪的是,其他一些物质对象工作得很好,但按钮却不行。就像与子模块共享 app.module 资源有些不一致。
-
这里的问题是,将自定义主题应用于 Angular Material 需要不限定样式。意味着主题样式应该是全球性的。您可以在某些根选择器的范围内定义一些主题,例如
#id2