Угловой материал - как добавить всплывающую подсказку к отключенной кнопке

Я заметил, что директива matTooltip не работает на отключенной кнопке. Как мне этого добиться?

Пример:

<button mat-raised-button [disabled]="true" matTooltip="You cannot delete that">
  <mat-icon>delete</mat-icon>
</button>

Для включенной кнопки это работает отлично:

<button mat-raised-button [disabled]="false" matTooltip="You cannot delete that">
  <mat-icon>delete</mat-icon>
</button>

Ответы

Ответ 1

Это не работает, потому что оно вызывается событием mouseenter, которое не запускается большинством браузеров для отключенных элементов. Обходной путь - добавить matTooltip к родительскому элементу:

<div matTooltip="You cannot delete that" [matTooltipDisabled]="!isButtonDisabled()">
    <button mat-raised-button [disabled]="isButtonDisabled()">
        <mat-icon>delete</mat-icon>
    </button>
</div>

В приведенном выше примере предполагается, что существует метод определения, должна ли кнопка быть включена или нет. При использовании matTooltipDisabled всплывающая подсказка будет отображаться, только если кнопка отключена.

Рекомендации:

Ответ 2

У меня была похожая проблема при отображении всплывающей подсказки на отключенной кнопке со значком. Данное решение не было практичным для меня, потому что добавление дополнительного div в верхней части кнопки, испортило расположение кнопки относительно других кнопок на панели инструментов.

Более простым решением для меня было добавить подсказку внутри иконки внутри кнопки. Примерно так:

<button mat-raised-button [disabled]="true">
    <mat-icon matTooltip="You cannot delete that">delete</mat-icon>
</button>

Поскольку значок не отключен, он работает.

Ответ 3

Да, самое простое решение, как выше. Но для моего случая мне нужно было больше гибкости.

   <button  [disabled]="form.invalid">
      <span [matTooltip]="form.invalid ? 'some text' : ''">button text</span>
    </button>