Showing posts with label Text Overflow hidden with 3dot show content in Auto Tooltip or Title in Angular. Show all posts
Showing posts with label Text Overflow hidden with 3dot show content in Auto Tooltip or Title in Angular. Show all posts

Tuesday, 2 August 2022

Text Overflow hidden with 3dot show content in Auto Tooltip or Title in Angular

Steps:

1. Create one sample application in Angular

2. Generate Components where we need to apply ex: ElipisyfyDemo

3. Generate Directive ex: ng g directive Directives/appEllipsifyMe

Directive code like below:

import {
  Directive, ElementRef, Renderer2,
  HostListener, AfterViewInit }
  from '@angular/core';

@Directive({
selector: '[appEllipsifyMe]'
})
export class EllipsifyMeDirective implements AfterViewInit {
  domElement: any;
constructor(private elementRef: ElementRef,
            private renderer: Renderer2) {
      this.domElement = this.elementRef.nativeElement;
      this.renderer.setProperty(this.domElement.style, 'text-overflow', 'ellipsis');
      this.renderer.setProperty(this.domElement.style, 'overflow', 'hidden');
      this.renderer.setProperty(this.domElement.style, 'white-space', 'nowrap');
    }
ngAfterViewInit(): void {
      this.renderer.setProperty(this.domElement, 'scrollTop', 1);
      //after view init setToolTip function will call based size it will apply.
      this.setToolTip();
   }
/// HostListener will listen whenever UI Resize ex: Minimize or maximize
@HostListener('window:resize', ['$event.target'])
  setToolTip() {
    /// conditional operator when if overflow add title else remove title
      (this.domElement.offsetWidth < this.domElement.scrollWidth) ?
         this.renderer.setAttribute(this.domElement,
                     'title',this.domElement.textContent) :
         this.renderer.removeAttribute(this.domElement, 'title');
   }
}

app.module.ts

Map directive in @NgModule to use it across entire module.

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { ElipisyfyDemoComponent } from './elipisyfy-demo/elipisyfy-demo.component';
import { EllipsifyMeDirective } from './Directives/app-ellipsify-me.directive';

@NgModule({
  declarations: [
    AppComponent,

    ElipisyfyDemoComponent,
    EllipsifyMeDirective

  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    FormsModule,
    ReactiveFormsModule,
   

  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }


Component Html:

<p>elipisyfy-demo works!</p>

<div class="title"  appEllipsifyMe>
    ArulkumarSivaraj@blogspot.com Based on screen size dynamically add tool-tip
    to the element
    when it's getting overflow hidden scenario.
    ArulkumarSivaraj@blogspot.com Based on screen size dynamically add tool-tip
    to the element
    when it's getting overflow hidden scenario.
    ArulkumarSivaraj@blogspot.com Based on screen size dynamically add tool-tip
    to the element
    when it's getting overflow hidden scenario.

</div>

After Run application & Result is below:

Text Overflow Demo