<mat-select>中没有足够的空间。如何添加多行<mat-option>?

Paw*_*ler 4 angular-material angular-material2 angular

我想在选项文本下有其他描述选项的行。默认情况下,mat-select限制字符数,并在行末添加“ ...”。我想有需要的多行选项。stakckblitz演示:https : //stackblitz.com/edit/angular-wj9svw 我的代码:

export class SelectOverviewExample {
  foods: Food[] = [
    {value: 'steak-0', viewValue: 'Steak longDescription longDescription longDescription longDescription longDescription'},
    {value: 'pizza-1', viewValue: 'Pizza longDescription longDescription longDescription longDescription longDescription longDescription v v longDescription'},
    {value: 'tacos-2', viewValue: 'Tacos'}
  ];
}
Run Code Online (Sandbox Code Playgroud)

的HTML:

<mat-form-field>
  <mat-select placeholder="Favorite food">
    <mat-option *ngFor="let food of foods" [value]="food.value">
      {{food.viewValue}}
      <b> some additional text text text text texttext </b>
    </mat-option>
  </mat-select>
</mat-form-field>
Run Code Online (Sandbox Code Playgroud)

Paw*_*ler 7

.mat-option {
  margin: 1rem 0;
  overflow: visible;
  line-height: initial;
  word-wrap: break-word;
  white-space: pre-wrap;
}
.mat-option i {
  display: block;
  font-size: 1.5rem;
  opacity: 0.6;
  margin-left: 0.5rem;

}
Run Code Online (Sandbox Code Playgroud)

这也很有帮助

  • `white-space: normal` 是更好的方法..请在此处阅读有关 `pre-wrap` 的内容 https://css-tricks.com/almanac/properties/w/whitespace/。它具有换行的重要性 (2认同)

Sun*_*ngh 6

使用以下css:

    .mat-select-panel mat-option.mat-option {
      height: unset;
    }

   .mat-option-text.mat-option-text {
      white-space: normal;
    }
Run Code Online (Sandbox Code Playgroud)

要么

/deep/ .mat-select-panel mat-option.mat-option {
  height: unset;
}

/deep/ .mat-option-text.mat-option-text {
  white-space: normal;
}
Run Code Online (Sandbox Code Playgroud)

示例演示在这里-https://stackblitz.com/edit/angular-material2-issue-ndtstg

  • 不幸的是,这仅适用于一个垫子选项。尝试在 stackblitz 示例中添加几个(例如 19 个),您会发现通过单击选择项目不再正常工作,也就是说,每次单击时列表都会滚动,导致您无法看到您选择的内容。 (2认同)

Wil*_*han 5

我通过编写一个MultiLineOptionDirective扩展<mat-option>并调用与和相同的setLines()函数来解决MatListItemMatGridTile@angular/material/core

<mat-form-field>
  <mat-label>Favorite food</mat-label>
  <mat-select [formControl]="mySelect">
    <mat-select-trigger>{{ mySelect.value }}</mat-select-trigger>
    <mat-option *ngFor="let food of foods" [value]="food.value" multiLineOption>
      <h4 mat-line>{{ food.value }}</h4>
      <p mat-line>{{ food.description }}</p>
    </mat-option>
  </mat-select>
</mat-form-field>
Run Code Online (Sandbox Code Playgroud)

https://stackblitz.com/edit/angular-material-multi-line-option

编辑:“扩展”可能会被误解,扩展就像指令中扩展元素的功能而不是类扩展基类一样。