angular - Angular2:每个延迟加载的子模块中的自定义材质主题
问题描述
在 Angular 7 应用程序的单独子模块中加载自定义 Angular Material 2 主题的问题
我有角度包装器模块(应用程序模块)和许多独立的延迟加载子模块。每个子模块的行为就像一个完全独立的应用程序,需要自己的角度材质主题。
我为每个子模块创建了自定义主题,并尝试在每个组件的.scss文件中使用相对路径引用自定义主题。
一些 Material 组件应用自定义主题(按钮),而一些(mat-form-field)只采用 style.scss 中指定的主题。
我可以避免这种情况的一种方法是将每个自定义主题包含在 angular.json 的“样式”数组中,但我担心,通过这样做,每个独立的子模块(应用程序)都必须加载每个主题的编译 .css这将是开销。
是否有任何已知问题或任何更好的解决方案?
主页-app.component.scss:
@import './theme.scss';
VS。
角.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中指定的导入主题
解决方案
您是否尝试将其直接添加到组件的样式数组中?
@Component({
selector: 'app-home',
template: 'your-template.html',
styles: ['your-style.scss', 'your-theme.scss']
})
您可以做的另一件事是使用 ShadowDom 作为您的 ViewEncapsulation :
@Component({
selector: 'app-home',
template: 'your-template.html',
styles: ['your-style.scss', 'your-theme.scss'],
encapsulation: ViewEncapsulation.ShadowDom
})
推荐阅读
- c++ - 接收到错误的数据类型时如何获取正确的数据类型
- kotlin - OkHttpClient 在发出后续请求时收到 202 后挂起
- java - 打印字符串中 Unicode 最低的字符
- wordpress - 如何使用 PayPal Express Checkout 修改 WooCommerce 的 PayPal 按钮?
- c# - 这是 AddMonths(number) 在 C# 中添加月份的有效方法吗?
- python-3.x - 有没有办法删除 paypal sdk 中的计费计划?
- angular - 为什么我的控制台日志没有从我的反应式 Angular 表单中打印出输入?
- node.js - NodeJS 应用程序是否必须完全无状态才能被复制?
- python-3.x - 如何在 python3 中创建重复列表的列表,而新列表不受原始小列表更改的影响?
- c++ - 为什么 istringstream 在字符串末尾抛出错误?