I needed the ability to place content in the clipboard, but needed it lots of placed throughout the application. So here's a simple Clipboard service that will place any string into the clipboard. I incorporated the use of MatSnackBar to notify the user that the value has been placed in the clipboard.
import {Injectable, Renderer2, RendererFactory2} from '@angular/core'; import { MatSnackBar } from '@angular/material/snack-bar'; @Injectable({ providedIn: 'root' }) export class ClipboardService { private renderer: Renderer2; constructor ( private rendererFactory: RendererFactory2, private snackBar: MatSnackBar, ) { // Get an instance of Angular's Renderer2 this.renderer = this.rendererFactory.createRenderer(null, null); } copy(value: string) { // create an temporary text input field to contain the value and select the value const input = this.renderer.createElement('input'); this.renderer.setProperty(input, 'value', value); this.renderer.appendChild(document.body, input); input.focus(); input.select(); input.setSelectionRange(0, 99999); // For mobile devices // Copy the selected text inside the text field to the clipboard document.execCommand('copy'); this.snackBar.open(`Copied "${value}" to clipboard`, undefined, { duration: 1000 }); // remove the temporary text input field this.renderer.removeChild(document.body, input); } }
import { ClipboardService } from 'clipboard.service'; constructor( private clipboard: ClipboardService ) {}
this.clipboard.copy(value);
No comments:
Post a Comment