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
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/>
Working Demo
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>
Working demo