覆盖 Angular Material 扩展面板 Header 中的默认功能
Override Default Functionality in Angular Material Expansion Panel Header
我正在尝试覆盖 Angular Material 扩展面板的默认折叠和展开功能。
https://material.angular.io/components/expansion/overview
默认情况下,如果在面板 Header 中的 任意位置 单击鼠标,扩展面板将切换 expanding/collapsing。
我想取消此功能,以便我可以将自定义 "toolbar" 按钮添加到 header。
我已经尝试将点击事件处理程序添加到面板 Header 并调用:event.stopPropogation();
以试图防止展开和折叠无济于事。
我还尝试将带有点击事件处理程序的按钮添加到面板 Header 以查看是否可以避免展开和折叠。不幸的是,这也没有用。
https://stackblitz.com/edit/angular-ritpbb
HTML
<mat-expansion-panel #matExpansionPanel
[class.active]="selected"
(click)="componentSelected($event)"
[expanded]="expanded">
<mat-expansion-panel-header (click)="togglePanel($event)">
Collapse Test <button mat-button>select panel</button>
</mat-expansion-panel-header>
CONTENT FOR EXPANSION PANEL
<mat-action-row>
<button mat-button (click)="buttonClick($event)">remove</button>
</mat-action-row>
</mat-expansion-panel>
.TS
import { Component } from '@angular/core';
import { MatExpansionPanel } from '@angular/material';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
expanded = true;
selected = false;
componentSelected($event) {
this.selected = !this.selected;
event.stopPropagation();
}
buttonClick($event) {
this.selected = !this.selected;
console.log('test');
event.stopPropagation();
}
togglePanel($event) {
this.expanded = !this.expanded;
//event.stopPropagation();
}
}
您可以添加 [disabled]="true"
来阻止默认功能。如果这就是你要问的
Stackblitz:https://stackblitz.com/edit/angular-nmupwc
您可以使用 [disabled]="true"
标志禁用 mat-expansion-panel 并从外部控制 expand/collapse 功能,如 stackblitz 中所示。我只是使用了已经可用的随机按钮和变量,但你明白了..
像下面这样的东西应该可以满足您的需要。
在 mat-expansion-panel
上使用 hideToggle
属性
<mat-expansion-panel #matExpansionPanel
[class.active]="selected"
[expanded]="expanded"
hideToggle>
将event
传递给expandPanel()
<mat-expansion-panel-header (click)="expandPanel($event)" >
获取对 matExpansionPanel
的引用,以便在 expandPanel()
中使用
@ViewChild('matExpansionPanel') _matExpansionPanel:any
expandPanel()
方法
expandPanel(event): void {
event.stopPropagation(); // Preventing event bubbling
if (this.expanded) {
this._matExpansionPanel.open(); // Here's the magic
}else{
this._matExpansionPanel.close()
}
}
CSS
以下将覆盖鼠标指针
.mat-expansion-panel-header:not([aria-disabled=true]) {
cursor: default !important;
}
button{
cursor: pointer
}
Stackblitz
https://stackblitz.com/edit/angular-jztdvu?embed=1&file=src/app/app.component.ts
您可以在您的操作中停止传播点击事件:
<mat-expansion-panel *ngFor="let panel of panels">
<mat-expansion-panel-header>
<mat-panel-title>title</mat-panel-title>
<mat-panel-description>
<mat-icon (click)="edit($event)">edit</mat-icon>
</mat-panel-description>
</mat-expansion-panel-header>
</mat-expansion-panel>
组件函数:
edit(event: Event) {
event.stopPropagation();
... do the logic here...
}
将内联 CSS 属性 添加到 <mat-expansion-panel-header>
中,
<mat-expansion-panel-header style="pointer-event: none">
Panel Title
</mat-expansion-panel-header>
我正在尝试覆盖 Angular Material 扩展面板的默认折叠和展开功能。
https://material.angular.io/components/expansion/overview
默认情况下,如果在面板 Header 中的 任意位置 单击鼠标,扩展面板将切换 expanding/collapsing。
我想取消此功能,以便我可以将自定义 "toolbar" 按钮添加到 header。
我已经尝试将点击事件处理程序添加到面板 Header 并调用:event.stopPropogation();
以试图防止展开和折叠无济于事。
我还尝试将带有点击事件处理程序的按钮添加到面板 Header 以查看是否可以避免展开和折叠。不幸的是,这也没有用。
https://stackblitz.com/edit/angular-ritpbb
HTML
<mat-expansion-panel #matExpansionPanel
[class.active]="selected"
(click)="componentSelected($event)"
[expanded]="expanded">
<mat-expansion-panel-header (click)="togglePanel($event)">
Collapse Test <button mat-button>select panel</button>
</mat-expansion-panel-header>
CONTENT FOR EXPANSION PANEL
<mat-action-row>
<button mat-button (click)="buttonClick($event)">remove</button>
</mat-action-row>
</mat-expansion-panel>
.TS
import { Component } from '@angular/core';
import { MatExpansionPanel } from '@angular/material';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
expanded = true;
selected = false;
componentSelected($event) {
this.selected = !this.selected;
event.stopPropagation();
}
buttonClick($event) {
this.selected = !this.selected;
console.log('test');
event.stopPropagation();
}
togglePanel($event) {
this.expanded = !this.expanded;
//event.stopPropagation();
}
}
您可以添加 [disabled]="true"
来阻止默认功能。如果这就是你要问的
Stackblitz:https://stackblitz.com/edit/angular-nmupwc
您可以使用 [disabled]="true"
标志禁用 mat-expansion-panel 并从外部控制 expand/collapse 功能,如 stackblitz 中所示。我只是使用了已经可用的随机按钮和变量,但你明白了..
像下面这样的东西应该可以满足您的需要。
在 mat-expansion-panel
hideToggle
属性
<mat-expansion-panel #matExpansionPanel
[class.active]="selected"
[expanded]="expanded"
hideToggle>
将event
传递给expandPanel()
<mat-expansion-panel-header (click)="expandPanel($event)" >
获取对 matExpansionPanel
的引用,以便在 expandPanel()
@ViewChild('matExpansionPanel') _matExpansionPanel:any
expandPanel()
方法
expandPanel(event): void {
event.stopPropagation(); // Preventing event bubbling
if (this.expanded) {
this._matExpansionPanel.open(); // Here's the magic
}else{
this._matExpansionPanel.close()
}
}
CSS
以下将覆盖鼠标指针
.mat-expansion-panel-header:not([aria-disabled=true]) {
cursor: default !important;
}
button{
cursor: pointer
}
Stackblitz
https://stackblitz.com/edit/angular-jztdvu?embed=1&file=src/app/app.component.ts
您可以在您的操作中停止传播点击事件:
<mat-expansion-panel *ngFor="let panel of panels">
<mat-expansion-panel-header>
<mat-panel-title>title</mat-panel-title>
<mat-panel-description>
<mat-icon (click)="edit($event)">edit</mat-icon>
</mat-panel-description>
</mat-expansion-panel-header>
</mat-expansion-panel>
组件函数:
edit(event: Event) {
event.stopPropagation();
... do the logic here...
}
将内联 CSS 属性 添加到 <mat-expansion-panel-header>
中,
<mat-expansion-panel-header style="pointer-event: none">
Panel Title
</mat-expansion-panel-header>