切换 a 的默认图标mat-expansion-panel
是>
。设置hideToggle
true 只是隐藏切换图标。有没有办法改变它?我在官方文档中一无所获。如果状态分别是关闭或打开,我想使用+
或-
图标。
6 回答
如 Angular Material Expansion Panel文档中所述,我们可以自定义 的样式mat-extension-panel-header
,这反过来又允许您自定义图标。
首先,通过将hideToggle
属性设置为 false 来隐藏原始图标。此外,我们将事件绑定分配(opened)
给(closed)
属性panelOpenState
。您可以查看这里mat-expansion-panel
的其他属性。
<mat-expansion-panel (opened)="panelOpenState = true" (closed)="panelOpenState = false"hideToggle="true">
接下来,在您的mat-panel-description
中,包含所需的自定义图标。显示的图标将取决于面板的状态。在本例中,我们使用Material Icons中的图标。
<mat-panel-description>
<mat-icon *ngIf="!panelOpenState">add</mat-icon>
<mat-icon *ngIf="panelOpenState">remove</mat-icon>
</mat-panel-description>
我已经编辑了 Angular 文档中的原始示例,因此它使用自定义+
和minus
图标来表示mat-extension-panel
. 您可以在此处访问演示。
有一个类.mat-expanded
适用于<mat-expansion-panel>
所以你可以只使用 CSS 来改变图标,不需要 JS。
- 要将箭头向下更改为向上:
.mat-expanded .mat-expansion-panel-header-title .material-icons{
transform: rotate(180deg);
}
<mat-panel-title>
<span class="material-icons">expand_more</span>
Panel with icon `transform`
</mat-panel-title>
- 交换图标:
.mat-expansion-panel-header-title .open,
.mat-expanded .mat-expansion-panel-header-title .close{
display: inline-block;
}
.mat-expanded .mat-expansion-panel-header-title .open,
.mat-expansion-panel-header-title .close{
display: none;
}
<mat-panel-title>
<span class="material-icons open">open_in_full</span>
<span class="material-icons close">close_fullscreen</span>
Panel with open/close
</mat-panel-title>
这是演示https://stackblitz.com/edit/angular-e2fnlm的链接
当您有多个材质扩展面板时,CSS 解决方案有效
为示例中的 mat-expansion-panel 命名面板命名。使用 mat-expansion-panel 的扩展属性来显示或隐藏 + 或 - 图标。
<mat-expansion-panel #panel hideToggle>
<mat-expansion-panel-header>
<mat-panel-title>
Buttons
</mat-panel-title>
<mat-icon >{{panel.expanded? 'remove' : 'add'}}</mat-icon>
</mat-expansion-panel-header>
</mat-expansion-panel>
您可以mat-icon
在mat-expansion-panel-header
.
请在 stackblitz 上查看这个工作示例。
对于+
您可以使用的图标<mat-icon>add</mat-icon>
<mat-accordion>
<mat-expansion-panel hideToggle>
<mat-expansion-panel-header>
<mat-panel-title>
Personal data
</mat-panel-title>
<mat-icon>add</mat-icon>
</mat-expansion-panel-header>
<mat-form-field>
<input matInput placeholder="First name">
</mat-form-field>
<mat-form-field>
<input matInput placeholder="Age">
</mat-form-field>
</mat-expansion-panel>
对于那些感兴趣的人,这里有一个适用于多个扩展面板的示例:
看法:
<mat-accordion>
<mat-expansion-panel *ngFor="let panel of panels; let i = index"
(opened)="panelOpenState[i] = true" (closed)="panelOpenState[i] = false"
hideToggle>
<mat-expansion-panel-header>
<mat-panel-title>
{{panel.title}}
</mat-panel-title>
<span *ngIf="!panelOpenState[i]">Show</span>
<span *ngIf="panelOpenState[i]">Hide</span>
</mat-expansion-panel-header>
Panel Content
</mat-expansion-panel>
</mat-accordion>
零件:
export class PanelComponent implements OnInit {
panels: [];
panelOpenState: boolean[] = [];
ngOnInit() {
// loop to add panels
for (let i = 0; i < 5; i++) {
this.panels.push({ title: i });
this.panelOpenState.push(false);
}
}
}
将hideToggle添加到 mat-expansion-panel :
<mat-expansion-panel (opened)="panelOpenState = true"
(closed)="panelOpenState = false" hideToggle>
并添加图标:
<mat-expansion-panel-header>
<mat-icon>add</mat-icon>