I am creating a custom directive called TooltipDirective whihc is going to add matTooltip to every host element, code is like below
import { Directive, ElementRef, Input, OnInit, Renderer } from '@angular/core';
@Directive({
selector: '[tooltip]'
})
export class TooltipDirective implements OnInit
{
@Input() tooltip: string;
constructor(private hostElement: ElementRef, private renderer: Renderer)
{
}
ngOnInit()
{
this.renderer.setElementAttribute(this.hostElement.nativeElement, 'matTooltip', this.tooltip);
}
}
In my html I have two elements to compare the result
<i class="material-icons" tooltip="Test Tooltip">reply_all</i>
<i class="material-icons" matTooltip="Test Tooltip">reply_all</i>
in the result html tooltip
and mattooltip
attributes are added but it doesn't show the tooltip.
and rendered html is like below
<i _ngcontent-c10="" class="material-icons" tooltip="Test Tooltip" mattooltip="Test Tooltip" ng-reflect-tooltip="Test Tooltip">reply_all</i>
<i _ngcontent-c10="" class="material-icons" mattooltip="Test Tooltip" aria-describedby="cdk-describedby-message-1" cdk-describedby-host="" ng-reflect-message="Test Tooltip">reply_all</i>
I tried adding other extra attributes but still doesn't work.
There's no way to do it in Angular. Keep an eye on this, so if maybe Angular guys will do it in case they start doing meaningful work.
Your other option is to create a dynamic component for this situtation which sucks for this kind of little thing. I'm not sure but it may break your AOT.
The other answer and comments are correct, btw finally I made it like this and it's working