2017-08-28 78 views

回答

1

使用ViewEncapsulation覆蓋默認樣式與您的樣式。

在打開的對話框中的分量,做如下更改:

import {ViewEncapsulation} from '@angular/core'; 

@Component({ 
    ....., 
    encapsulation: ViewEncapsulation.None 
}) 

,並在該組件的CSS文件,添加以下類:

.mat-dialog-container { 
    padding: 0px !important; 
} 

這裏是Plunker Demo的鏈接。

+2

這是非常蠻力的方法,因爲它將爲* all *材質對話框填充!相反,在對話框的'panelClass'配置中添加一個像'app-full-bleed-dialog'這樣的類。然後在你*全局樣式*中,用'.app-full-bleed-dialog .mat-dialog-container'選擇器添加你的覆蓋。 –

+0

@WillHowell,這可以通過使用'ViewEncapsulation.Native'或'ViewEncapsulation.Emulated'來避免。這裏的想法是給OP提供一個方向,同時解決問題。這就是爲什麼我有一個包含在我的答案中的ViewEncapsulation文檔的鏈接。我會採取你的downvote一個很好解釋的評論。但我不同意你的選擇方法。 – Faisal

6

我對所選答案發表了評論,但我想在一個完整答案中作出澄清。如果您將對話框樣式添加到您的組件並將ViewEncapsulation設置爲無,這些樣式將全局影響您的整個應用程序,並且任何未來的對話框都將打開而無需填充。

而是選擇利用對話框的panelClass屬性:

component.ts

this.dialog.open(MyDialogComponent, { 
    panelClass: 'app-full-bleed-dialog', 
    data: ... 
}); 

全球樣式

.app-full-bleed-dialog .mat-dialog-container { 
    padding: 0; 
} 

這樣的話,你仍然可以保持封裝上的對話框組件樣式,並且您可以選擇性請根據需要重複使用您的app-full-bleed-dialog類。

要了解更多關於定製材料部件的信息,請致電check out this guide

+0

那麼爲什麼要在組件的樣式中定義可以在全局樣式文件中保留重寫的樣式呢? ViewEncapsulation由角度提供是有原因的。 – Faisal

+1

ViewEncapsulation僅用於將組件的樣式設定爲自己。 OP問(換句話說)如何設計_different_組件。您加載到對話框中的組件是'.mat-dialog-container'的子組件,因此無法在不使用全局樣式的情況下定位該選擇器。這正是「無」無論如何,這就是它的原因。所以是的,你的方法是有效的,但是**沒有可能的方法**來確保只有那一個對話框受到影響......如果你可以使用2個對話框進行演示,一個沒有填充,另一個使用_without使用panelClass_,我會承認的。 –

+0

當然我稍後會看看,我不否認你的擔憂,必須先自己測試一下。 – Faisal