'Directive to disable Cut, Copy and Paste function for textbox using Angular2
I am using Angular2 to restrict the copy and paste in textbox. But how do i write a custom directive, so that it will be easy to apply for all the text fields.
Below is the working code to restrict the copy and paste functionality.
<ion-input formControlName="confirmpass" type="tel" (cut)="$event.preventDefault()" (copy)="$event.preventDefault()" (paste)="$event.preventDefault()"></ion-input>
Solution 1:[1]
You can use a HostListener in your directive to catch cut, paste and copy events and then use preventDefault()
. Here's an example
import { Directive, HostListener } from '@angular/core';
@Directive({
selector: '[appBlockCopyPaste]'
})
export class BlockCopyPasteDirective {
constructor() { }
@HostListener('paste', ['$event']) blockPaste(e: KeyboardEvent) {
e.preventDefault();
}
@HostListener('copy', ['$event']) blockCopy(e: KeyboardEvent) {
e.preventDefault();
}
@HostListener('cut', ['$event']) blockCut(e: KeyboardEvent) {
e.preventDefault();
}
}
Use directive like so
<ion-input appBlockCopyPaste formControlName="confirmpass" type="tel"></ion-input>
Solution 2:[2]
You can use Renderer
to listen to cut,copy,paste
events and call preventDefault()
in your directive something like
@Directive({ selector: '[preventCutCopyPaste]' })
export class CopyDirective {
constructor(el: ElementRef, renderer: Renderer) {
var events = 'cut copy paste';
events.split(' ').forEach(e =>
renderer.listen(el.nativeElement, e, (event) => {
event.preventDefault();
})
);
}
}
Then in html
<input type="text" preventCutCopyPaste/>
Solution 3:[3]
You can do this
<input (paste)="(false)" />
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | |
Solution 3 | Mario Linares |