如何将 Angular Material 扩展面板箭头图标定位在左侧

Posted

技术标签:

【中文标题】如何将 Angular Material 扩展面板箭头图标定位在左侧【英文标题】:How to position the Angular Material expansion panel arrow icon on the left-hand side 【发布时间】:2018-04-12 10:14:27 【问题描述】:

我已在我的应用程序中将 Angular Material 升级到 4.0。我根据要求使用<mat-expansion-panel>。扩展箭头必须在面板的左侧,但默认情况下它显示在右侧。我检查了 align 选项,但没有得到我需要的。

<mat-expansion-panel expanded='true'>
   <mat-expansion-panel-header [ngClass]="tickets-container-header">
      <mat-panel-title>
         <div class="col-md-9">
         header 
         </div>
      </mat-panel-title>

   </mat-expansion-panel-header>
</mat-expansion-panel>

【问题讨论】:

【参考方案1】:

您可以使用togglePosition 属性将切换箭头的位置设置在标题之前。

<mat-expansion-panel expanded='true' togglePosition="before">
   <mat-expansion-panel-header [ngClass]="tickets-container-header">
      <mat-panel-title>
         <div class="col-md-9">
            header 
         </div>
      </mat-panel-title>
   </mat-expansion-panel-header>
</mat-expansion-panel>

它在文档的 API 部分中可用。 https://material.angular.io/components/expansion/api#MatAccordionTogglePosition

【讨论】:

【参考方案2】:

只需在面板标题上添加类“mat-expansion-toggle-indicator-before”。示例:

<mat-expansion-panel>
<mat-expansion-panel-header class="mat-expansion-toggle-indicator-before">
    <mat-panel-title>
        A title!
    </mat-panel-title>
</mat-expansion-panel-header>

【讨论】:

为我工作。扩展箭头现在位于右侧。谢谢!【参考方案3】:

使用 Angular 装饰器“@indicatorRotate”

   <mat-icon [@indicatorRotate]="expanded ? 'expanded': 'collapsed'">
     expand_more
  </mat-icon>

【讨论】:

【参考方案4】:

从 Angular Material 8.1.x 开始,您可以使用 @Input() togglePosition-decorator。

The documentation states the following

@Input() 切换位置:MatAccordionTogglePosition |展开指示器的位置。

像这样将它添加到手风琴中:&lt;mat-accordion [togglePosition]="'before'"&gt;

这是Stackblitz with an example

【讨论】:

【参考方案5】:

无需添加函数和变量。只需添加此样式:

.mat-expansion-panel-header > span.mat-content 
    order: 2;    

【讨论】:

不要在cmets中贴代码相关的备注,你可以edit你的答案并包含在里面【参考方案6】:

只使用 css 为我工作:

.mat-expansion-indicator 
    position: absolute;
    left: 15px;
  

【讨论】:

我最初尝试过这个,并注意到当手风琴在嵌套扩展面板时动画时出现了一些奇怪的画面。接受的答案在渲染时提供了更好的性能。【参考方案7】:

首先需要在app.module.ts文件中导入角材质图标和扩展面板模块,

import MatExpansionModule,MatIconModule from '@angular/material';
...
@NgModule(
  ...
  imports: [
    MatExpansionModule,
    MatIconModule 
  ]
  ...
)
export class AppModule  

将此代码添加到您的 html 文件中,

    <mat-expansion-panel expanded='true' hideToggle="true" (click)="click()">
      <mat-expansion-panel-header [ngClass]="tickets-container-header">
        <mat-panel-title>
            <mat-icon>icon  ? 'keyboard_arrow_down' : 'keyboard_arrow_up' </mat-icon>
            <div  class="col-md-9">
            header 
            </div>
        </mat-panel-title>

      </mat-expansion-panel-header>
    </mat-expansion-panel>

将此代码添加到您的组件文件中,

icon: boolean = false;

click()
    this.icon = !this.icon;
  

谢谢,

【讨论】:

hideToggle 不能用于隐藏箭头,使用我已经完成的 css。谢谢。 您可以在面板上使用#panel(即&lt;mat-expansion-panel #panel ...)而不是使用icon 字段,并在mat-icon 元素中使用panel.expanded ? 'keyboard-arrow-up' : 'keyboard-arrow-down' ...这将删除需要click 事件处理程序。

以上是关于如何将 Angular Material 扩展面板箭头图标定位在左侧的主要内容,如果未能解决你的问题,请参考以下文章

如何扩展/覆盖 Angular Material $mdDialog.show 中的默认选项?

包装或扩展 angular-material 组件,允许将未知属性传递给子组件

Angular Material:当用户点击输入键时隐藏自动完成面板

Material UI 控制的扩展面板不工作

Flutter 应用程序创建一个扩展面板列表

Angular Material:如何将 floatPlaceholder 设置为从不