Angular 5和材质 - 如何从SnackBar组件更改背景颜色

and*_*ula 21 angular-material2 angular

我必须从快餐栏组件更改背景.我正在使用它来警告或通知用户有关用户所做的某些错误或已完成的操作.

项目的材料版本."@ angular/material":"^ 5.0.0-rc.1",

文档https://material.angular.io/components/snack-bar/api说一个改变类的api.

panelClass:string | string []要添加到小吃店容器的额外CSS类.

这是我在css文件中添加的内容.

.mycsssnackbartest {
  background-color: blue;
}
Run Code Online (Sandbox Code Playgroud)

这是打开小吃店的代码

this.snackBar.open('Informing the user about sth', 'User Message' , {
    panelClass: ['mycsssnackbartest ']
} );
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Phi*_*ief 53

你必须使用panelClass选项(从v6开始)在快餐栏上应用类,如下所示:

this.snackBar.open(message, action, {
  duration: 2000,
  panelClass: ['blue-snackbar']
});
Run Code Online (Sandbox Code Playgroud)

CSS(在styles.scss中):

.blue-snackbar {
  background: #2196F3;
}
Run Code Online (Sandbox Code Playgroud)

请参阅Stackblitz示例

  • 不用没有!对背景颜色很重要. (6认同)
  • 截至材料6,不推荐使用extraClasses.panelClass应该提供相同的功能. (2认同)
  • 我必须在 css 规则中添加 !important 以使其正常工作 (2认同)

Fra*_*his 42

使用主题:

基本的:

this.snackBar.open('Some message','Some action', {
    duration: 2000,
    panelClass: ['mat-toolbar', 'mat-primary']
});
Run Code Online (Sandbox Code Playgroud)

切换:'mat-primary''mat-accent''mat-warn'

  • 这确实应该是公认的答案,因为它通过使用主题正确地做到了这一点。 (8认同)
  • @PurplePiranha我不同意,“mat-toolbar”是角度材料的另一个元素,使用此配置更改了“mat-snackbar”上的字体大小,这并不是真正的意图。但在某些情况下可能有用...... (3认同)

小智 10

//in component.ts
this.snackbar.open(message, '', {
    duration: 2000,
    verticalPosition: 'top',
    panelClass: ['warning']
 });
//in component.css
::ng-deep .warning{
   background: 'yellow';
}
Run Code Online (Sandbox Code Playgroud)

  • ::ng-deep 已折旧,将来 Angular 将不再支持 https://angular.io/guide/component-styles (2认同)

小智 5

是的,在全局样式文件(.css)中添加 ::ng-deep 之后,每个属性都可以正常工作......如下

noMatchConfig: MatSnackBarConfig = {
    duration: 2000,
    horizontalPosition: 'right',
    verticalPosition: 'top',
    panelClass:['redNoMatch']
  }



::ng-deep .redNoMatch
{
  color:white;
  background: #F44336 !important;
}
Run Code Online (Sandbox Code Playgroud)