Skip to content

Instantly share code, notes, and snippets.

@AlejandroPerezMartin
Last active April 11, 2023 15:18
Show Gist options
  • Save AlejandroPerezMartin/ecd014cb8104c235b582f3a3e1649cf7 to your computer and use it in GitHub Desktop.
Save AlejandroPerezMartin/ecd014cb8104c235b582f3a3e1649cf7 to your computer and use it in GitHub Desktop.
Angular 9+ Directive to remove focus after clicking the specified selector/s
import { Directive, HostListener, ElementRef, Renderer } from '@angular/core';
/**
* This directive removes focus from the selectors after clicking on them
*/
@Directive({
selector: 'button, a' // your selectors here!
})
export class FocusRemover {
constructor(private elRef: ElementRef, private renderer: Renderer) { }
@HostListener('click') onClick() {
this.renderer.invokeElementMethod(this.elRef.nativeElement, 'blur', []);
}
}
@gforcedev
Copy link

Thanks so much this worked fantastic in my app!

@AlejandroPerezMartin
Copy link
Author

AlejandroPerezMartin commented Jun 12, 2018

@gforcedev 😃 👍

@AntonVoronezh
Copy link

i think this is a good solution

@vitaliidasaev
Copy link

For Angular 9 and upper used blur() because Renderer is outdated.

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

/**
 * This directive removes focus from the selectors after clicking on them
 */
@Directive({
  selector: 'button, a', // your selectors here!
})
export class FocusRemover {
  constructor(private elRef: ElementRef) {}

  @HostListener('click') onClick() {
    this.elRef.nativeElement.blur();
  }
}

@AlejandroPerezMartin
Copy link
Author

updated gist, thanks @vitaliidasaev

@AbhinavAtul
Copy link

AbhinavAtul commented Oct 31, 2020

@AlejandroPerezMartin
Copy link
Author

no license @AbhinavAtul, use it the way you want! it's a really simple script so I don't think it's needed

@carlabruti
Copy link

Works great, thanks !

@Tamal2017
Copy link

Tamal2017 commented Mar 10, 2021

Please @AlejandroPerezMartin how am I going to use this Directive?
Can I implement it for Angular 8?

@AlejandroPerezMartin
Copy link
Author

Please @AlejandroPerezMartin how am I going to use this Directive?
Can I implement it for Angular 8?

I'm not using Angular anymore so I'm not sure, but I believe you can use a previous version of this gist: https://gist.github.com/AlejandroPerezMartin/ecd014cb8104c235b582f3a3e1649cf7/0bff5561689e5cbbfa878fab3bc2ec716e58eb58

@Tamal2017
Copy link

ok thanks

@ElenaG518
Copy link

very nice!

@mrtabaa
Copy link

mrtabaa commented Mar 13, 2022

In my case, it has to be wrapped with setTimout() like this otherwise the timing messes up with it to function properly:

@HostListener('click')
onClick() {
setTimeout(() => this.elRef.nativeElement.blur());
}

@m4n50n
Copy link

m4n50n commented Apr 11, 2023

Thanks👌

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment