角度自定义样式到mat-dialog

Ard*_*nne 9 angular-material angular

我想在Angular 5中自定义默认的"mat-dialog".我想要实现的是在对话框的上半部分有一个工具栏,它应该覆盖整个宽度.但是,mat-dialog-container有一个24px的固定填充,我无法覆盖.我试着设置h1和mat-dialog-container的样式.

@Component({
selector: 'error-dialog',
template: 
` <h1 mat-dialog-title> ERRORE </h1>             
    <div mat-dialog-content>
        {{data.error}}
    </div>
    <div mat-dialog-actions>
        <button mat-button (click)="onClick()">Ok</button> 
    </div>`,
styles: [
'h1 { background: #E60000; color: white; }',
// 'myDialogStyle .mat-dialog-container { padding: 1px !important;}'
]})

export class ErrorDialog {
constructor(
public dialogRef: MatDialogRef<ErrorDialog>,
@Inject(MAT_DIALOG_DATA) public data: any) { }

onClick(): void {
this.dialogRef.close();
 }
}

openErrorDialog(errore: string): void{
    let dialogRef = this.dialog.open(ErrorDialog, {
        width: '80%',
        data: { error: errore }
        //panelClass: 'myDialogStyle'
    });
}
Run Code Online (Sandbox Code Playgroud)

Pie*_*let 26

您可以在matDialogConfig对象中传递自定义panelClass(此处为doc)

所以

openErrorDialog(errore: string): void{
let dialogRef = this.dialog.open(ErrorDialog, {
    width: '80%',
    data: { error: errore }
    panelClass: 'custom-modalbox'
});
Run Code Online (Sandbox Code Playgroud)

}

在您的自定义panelClass中,您可以覆盖填充:

.custom-modalbox {
    mat-dialog-container {
        padding: 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是你的.custom-modalbox应该应用于全局作用域(未在组件样式中定义)

  • 如果使用@Component({viewEncapsulation.None}),则可以将类声明保留在组件的CSS文件中。 (2认同)
  • @Please_Dont_Bully_Me_SO_Lords 我喜欢你的方法,但语法是这样的:`@Component({encapsulation: ViewEncapsulation.None})` (2认同)

Sar*_*ani 12

这肯定会奏效:

::ng-deep.mat-dialog-container {
    padding: 0px !important;
}
Run Code Online (Sandbox Code Playgroud)

  • ng-deep 已被弃用,并且使用 !important 是一种非常糟糕的做法......这种方法可能有效,但我不会推荐它。 (4认同)
  • 如果您在 mat-dialog-container 中进行更改,它将反映在所有对话框中。现在假设您有两个对话框,其中一个用于错误,该对话框应位于底部(如小吃店)。另一个是成功,应该覆盖整个屏幕。这个方法在那里行不通。 (3认同)
  • 我支持你的回答 ng-Deeply ;) (2认同)
  • “这肯定会起作用”——不是不行。 (2认同)

小智 7

当您的样式在全局范围内时, panelClass 可以完美工作,否则它不会,因为样式不可用。

在您的样式之前添加 ng-deep 以全局访问它!

::ng-deep {

 .custom-dialog > mat-dialog-container {
        padding: 0px;
    }

}
Run Code Online (Sandbox Code Playgroud)


Ard*_*nne 6

我只是改变了这一点,它完美地工作:

.custom-modalbox >  mat-dialog-container {
        padding: 0px;
}
Run Code Online (Sandbox Code Playgroud)

这里有一个工作示例:https : //stackblitz.com/edit/custom-dialog?file=src/styles.css


小智 5

您应该同时在组件上使用 panelClass 和 ::ng-deep 在 css 上。

openErrorDialog(errore: string): void{
let dialogRef = this.dialog.open(ErrorDialog, {
    width: '80%',
    data: { error: errore }
    panelClass: 'custom-modalbox'
});
}
Run Code Online (Sandbox Code Playgroud)

在 CSS 中:

::ng-deep .custom-modalbox {
mat-dialog-container {
    padding: 0;
}
}
Run Code Online (Sandbox Code Playgroud)