Je sais que cela a déjà été largement voté ici à présent, mais je préfère adopter une approche de directive personnalisée et me fier à l'événement ClipboardEvent comme @jockeisorby l'a suggéré, tout en veillant à ce que l'écouteur soit correctement supprimé (la même fonction doit être fournie pour les événements d'ajout et de suppression)
stackblitz démonstration
import { Directive, Input, Output, EventEmitter, HostListener } from "@angular/core";
@Directive({ selector: '[copy-clipboard]' })
export class CopyClipboardDirective {
@Input("copy-clipboard")
public payload: string;
@Output("copied")
public copied: EventEmitter = new EventEmitter();
@HostListener("click", ["$event"])
public onClick(event: MouseEvent): void {
event.preventDefault();
if (!this.payload)
return;
let listener = (e: ClipboardEvent) => {
let clipboard = e.clipboardData || window["clipboardData"];
clipboard.setData("text", this.payload.toString());
e.preventDefault();
this.copied.emit(this.payload);
};
document.addEventListener("copy", listener, false)
document.execCommand("copy");
document.removeEventListener("copy", listener, false);
}
}
et ensuite l'utiliser de la sorte
Copier
public notify(payload: string) {
// Vous voudrez peut-être informer l'utilisateur qu'un élément a été copié dans le presse-papiers
console.info(`'${payload}' a été copié dans le presse-papiers`);
}
Note : remarquez que window["clipboardData"]
est nécessaire pour IE car il ne comprend pas e.clipboardData
0 votes
Vous pouvez utiliser ngxyz-c2c, il existe plusieurs façons de le faire.
1 votes
Si vous utilisez Angular Material, alors la version 9.0.0 (publiée le 6 février 2020) a introduit le package de presse-papiers super facile à utiliser clipboard. Consultez la documentation d'Angular et la réponse de @Nabel sur Stack Overflow.