Angular 5 Material Snackbar panelClass配置

abh*_*tps 7 typescript angular-material angular

我正在尝试将panelClass配置添加到Angular Material Snackbar.

我通过以下官方网站的文档编写了以下代码.

import { Component, OnInit } from '@angular/core';
import { MatSnackBar, MatSnackBarConfig } from "@angular/material";
import { Location } from '@angular/common';

@Component({
  selector: 'snack-bar-component-example',
  templateUrl: './snack-bar-component-example.html',
  styleUrls: ['./snack-bar-component-example.css']
})
export class SnackBarComponentExample implements OnInit {

  constructor(public snackBar: MatSnackBar) { }

  ngOnInit() {
  }

  saveButtonClick = () =>{
    this.snackBar.open("This is a message!", "ACTION", {
      duration: 3000,
      panelClass: ["font-family:'Open Sans', sans-serif;"]
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

我已经将事件绑定到HTML按钮.当我删除panelClass配置时,持续时间配置工作正常.我正在导入Google字体(Open Sans)并尝试将字体应用于Snackbar.但是,我收到一个错误:

ERROR DOMException: Failed to execute 'add' on 'DOMTokenList': The token provided ('font-family:'Open Sans', sans-serif;') contains HTML space characters, which are not valid in tokens.
Run Code Online (Sandbox Code Playgroud)

也许,我无法理解如何使用panelClass.甚至,当我试图添加这个,

panelClass: ["color:white;"];
Run Code Online (Sandbox Code Playgroud)

它仍然显示错误:

ERROR DOMException: Failed to execute 'add' on 'DOMTokenList': The token provided ('color: white;') contains HTML space characters, which are not valid in tokens.
Run Code Online (Sandbox Code Playgroud)

如何修复此错误并使其正常工作?请帮忙.

PS:我知道extraClasses配置.但是,我不想使用它,因为文档中写的它很快就会被弃用.

PPS:它在持续时间配置下工作正常.

Nar*_*arm 17

在您的组件SnackBarComponentExample中尝试:

saveButtonClick = () =>{
  let config = new MatSnackBarConfig();
  config.duration = 5000;
  config.panelClass = ['red-snackbar']
  this.snackBar.open("This is a message!", "ACTION", config);
}
Run Code Online (Sandbox Code Playgroud)

}

其中'red-snackbar'是您的应用主要styles.css文件中的一个类.奇怪的是,当我引用我的组件关联的css文件时,我无法使config.panelClass工作,但是一旦我将类放入主要的styles.css文件中,我的样式就被正确地应用到了snackBar.

  • 或者:`this.snackBar.open(“这是一条消息!”,“ ACTION”,{持续时间:500,panelClass:['red-snackbar']}));` (2认同)
  • 组件 css 文件中的样式是独立的,这意味着您无法将它们注入到较低级别的组件中,这就是它不起作用的原因。 (2认同)

小智 7

在我的情况下,以上所有内容都不起作用。它开始工作时,我想补充!importantcss

.error-snackbar {
  background-color: fuchsia !important;
}
Run Code Online (Sandbox Code Playgroud)


Luc*_*cky 5

在 Angular 7 中,在课堂上使用 ::ng-deep 对我有用。

::ng-deep  .snackBar-fail {
    color: #ffffff !important;
    background-color: #cc3333 !important;
}
Run Code Online (Sandbox Code Playgroud)