代码之家  ›  专栏  ›  技术社区  ›  Teun van der Wijst

角度材质自定义主题使弹出窗口透明

  •  -1
  • Teun van der Wijst  · 技术社区  · 6 年前

    我目前正在用Angular和Material2设计一个仪表板。我有一个问题,任何弹出窗口在应用程序中出现一个透明的背景。

    我已经举例说明了这个问题 StackBlitz

    custom material theme .

    "src/theme.scss" 从项目中 angular.json 在中归档并使用预构建的材质主题 style.css 像这样;

    @import '~@angular/material/prebuilt-themes/deeppurple-amber.css';
    

    弹出窗口的背景再次正常。

    所有弹出窗口(日期选择器、分页器等)都会发生这种情况。

    我的 ~/src/theme.scss 文件看起来像这样;

    @import '~@angular/material/theming';
    // always include only once per project
    
    @include mat-core();
    
    // define 3 theme color
    // mat-palette accepts $palette-name, main, lighter and darker variants
    $dashboard-theme-primary: mat-palette($mat-blue);
    $dashboard-theme-accent: mat-palette($mat-grey);
    $dashboard-theme-warn: mat-palette($mat-red);
    
    // create theme (use mat-dark-theme for themes with dark backgrounds)
    $dashboard-theme: mat-light-theme(
        $dashboard-theme-primary,
        $dashboard-theme-accent,
        $dashboard-theme-warn
    );
    
    $dashboard-theme-dark: mat-dark-theme(
        $dashboard-theme-primary,
        $dashboard-theme-accent,
        $dashboard-theme-warn
    );
    
    .dashboard-theme {
      @include angular-material-theme($dashboard-theme);
    }
    
    .dashboard-theme-dark {
      @include angular-material-theme($dashboard-theme-dark);
    }
    

    主题应用于项目 <div> app.component.html

    非常感谢您的帮助:)

    更新

    我已经更新了整个项目使用 scss css ,然后我重建了我的整个习惯 theme.scss 所有的材料组件都得到适当的样式,我可以动态地在明暗主题之间切换,我甚至可以样式非材料组件。但是我的弹出窗口保持透明,除非我使用上面描述的预构建主题。

    package.json :

    {
      "name": "DiagnosisDashboard",
      "version": "0.0.0",
      "scripts": {
        "ng": "ng",
        "start": "ng serve",
        "build": "ng build",
        "test": "ng test",
        "lint": "ng lint",
        "e2e": "ng e2e"
      },
      "private": true,
      "dependencies": {
        "@angular/animations": "^6.1.7",
        "@angular/cdk": "^6.4.7",
        "@angular/common": "^6.1.0",
        "@angular/compiler": "^6.1.0",
        "@angular/core": "^6.1.8",
        "@angular/forms": "^6.1.8",
        "@angular/http": "^6.1.8",
        "@angular/material": "^6.4.7",
        "@angular/material-moment-adapter": "^6.4.7",
        "@angular/platform-browser": "^6.1.8",
        "@angular/platform-browser-dynamic": "^6.1.8",
        "@angular/router": "^6.1.8",
        "core-js": "^2.5.4",
        "moment": "^2.22.2",
        "rxjs": "^6.0.0",
        "zone.js": "~0.8.26"
      },
      "devDependencies": {
        "@angular-devkit/build-angular": "~0.8.2",
        "@angular/cli": "^6.1.5",
        "@angular/compiler-cli": "^6.1.0",
        "@angular/language-service": "^6.1.8",
        "@types/jasmine": "~2.8.6",
        "@types/jasminewd2": "~2.0.3",
        "@types/node": "~10.10.1",
        "codelyzer": "~4.4.4",
        "jasmine-core": "~3.2.1",
        "jasmine-spec-reporter": "~4.2.1",
        "karma": "~3.0.0",
        "karma-chrome-launcher": "~2.2.0",
        "karma-coverage-istanbul-reporter": "^2.0.4",
        "karma-jasmine": "~1.1.1",
        "karma-jasmine-html-reporter": "^1.3.1",
        "protractor": "^5.4.1",
        "ts-node": "~7.0.1",
        "tslint": "~5.11.0",
        "typescript": "~2.7.2"
      }
    }
    

    angular.json :

    {
      "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
      "version": 1,
      "newProjectRoot": "projects",
      "projects": {
        "my-app": {
          "root": "",
          "sourceRoot": "src",
          "projectType": "application",
          "prefix": "app",
          "schematics": {},
          "architect": {
            "build": {
              "builder": "@angular-devkit/build-angular:browser",
              "options": {
                "outputPath": "dist/my-app",
                "index": "src/index.html",
                "main": "src/main.ts",
                "polyfills": "src/polyfills.ts",
                "tsConfig": "src/tsconfig.app.json",
                "assets": [
                  "src/favicon.ico",
                  "src/assets"
                ],
                "styles": [
                  "src/styles.scss",
                  "src/app/theme.scss"
                ],
                "scripts": []
              },
              "configurations": {
                "production": {
                  "fileReplacements": [
                    {
                      "replace": "src/environments/environment.ts",
                      "with": "src/environments/environment.prod.ts"
                    }
                  ],
                  "optimization": true,
                  "outputHashing": "all",
                  "sourceMap": false,
                  "extractCss": true,
                  "namedChunks": false,
                  "aot": true,
                  "extractLicenses": true,
                  "vendorChunk": false,
                  "buildOptimizer": true
                }
              }
            },
            "serve": {
              "builder": "@angular-devkit/build-angular:dev-server",
              "options": {
                "browserTarget": "my-app:build"
              },
              "configurations": {
                "production": {
                  "browserTarget": "my-app:build:production"
                }
              }
            },
            "extract-i18n": {
              "builder": "@angular-devkit/build-angular:extract-i18n",
              "options": {
                "browserTarget": "my-app:build"
              }
            },
            "test": {
              "builder": "@angular-devkit/build-angular:karma",
              "options": {
                "main": "src/test.ts",
                "polyfills": "src/polyfills.ts",
                "tsConfig": "src/tsconfig.spec.json",
                "karmaConfig": "src/karma.conf.js",
                "styles": [
                  "src/styles.scss",
                  "src/app/theme.scss"
                ],
                "scripts": [],
                "assets": [
                  "src/favicon.ico",
                  "src/assets"
                ]
              }
            },
            "lint": {
              "builder": "@angular-devkit/build-angular:tslint",
              "options": {
                "tsConfig": [
                  "src/tsconfig.app.json",
                  "src/tsconfig.spec.json"
                ],
                "exclude": [
                  "**/node_modules/**"
                ]
              }
            }
          }
        },
        "my-app-e2e": {
          "root": "e2e/",
          "projectType": "application",
          "architect": {
            "e2e": {
              "builder": "@angular-devkit/build-angular:protractor",
              "options": {
                "protractorConfig": "e2e/protractor.conf.js",
                "devServerTarget": "my-app:serve"
              },
              "configurations": {
                "production": {
                  "devServerTarget": "my-app:serve:production"
                }
              }
            },
            "lint": {
              "builder": "@angular-devkit/build-angular:tslint",
              "options": {
                "tsConfig": "e2e/tsconfig.e2e.json",
                "exclude": [
                  "**/node_modules/**"
                ]
              }
            }
          }
        }
      },
      "defaultProject": "my-app",
      "schematics": {
        "@schematics/angular:component": {
          "styleext": "scss"
        }
      }
    }
    

    新建 StackBlitz

    1 回复  |  直到 6 年前
        1
  •  3
  •   G. Tranter    6 年前

    “弹出窗口”包含在覆盖容器中,覆盖容器是 <body> . 应用于基本应用程序组件的任何样式都不会应用于覆盖容器-必须显式应用它。请参阅的“多主题和基于覆盖的组件”部分 theming docs . 例如:

    import {OverlayContainer} from '@angular/cdk/overlay';
    
    export class AppComponent {
    
        constructor(overlayContainer: OverlayContainer) { }
    
        applyTheme(theme: string) {
            this.overlayContainer.getContainerElement().classList.add(theme);
        }
    }