1

我正在尝试覆盖 Angular 材质扩展面板的默认折叠和展开功能。
https://material.angular.io/components/expansion/overview

默认情况下,如果在面板标题中的任何 位置单击鼠标,扩展面板将切换展开/折叠。

我想禁止此功能,以便可以将自定义“工具栏”按钮添加到标题中。

我尝试向 Panel Header 添加一个 click 事件处理程序并调用:event.stopPropogation();以尝试防止展开和折叠无济于事。

我还尝试在面板标题中添加一个带有单击事件处理程序的按钮,看看我是否可以回避展开和折叠。不幸的是,这也不起作用。

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&nbsp;&nbsp;<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();
}
}
4

4 回答 4

3

像下面这样的东西应该做你需要的。

使用hideToggle属性mat-expansion-panel

<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
}

堆栈闪电战

https://stackblitz.com/edit/angular-jztdvu?embed=1&file=src/app/app.component.ts

于 2018-12-04T00:04:26.323 回答
1

您可以添加[disabled]="true"以阻止默认功能。如果这就是你要问的

Stackblitz:https ://stackblitz.com/edit/angular-nmupwc

您可以使用标志禁用 mat-expansion-panel[disabled]="true"并从外部控制展开/折叠功能,如 stackblitz 中所示。我只是使用了已经可用的随机按钮和变量,但你明白了..

于 2018-12-03T23:13:08.793 回答
0

您可以在您的操作中停止传播点击事件:

<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...
  }
于 2019-10-24T17:46:57.737 回答
0

将内联 CSS 属性添加到<mat-expansion-panel-header>like 中,

<mat-expansion-panel-header style="pointer-event: none">
      Panel Title
</mat-expansion-panel-header>
于 2020-07-30T00:54:52.570 回答