मुझे पता है कि यह पहले से ही अब तक यहाँ पर अत्यधिक मतदान किया गया है, लेकिन मैं एक कस्टम निर्देशात्मक दृष्टिकोण के लिए जाऊंगा और क्लिपबोर्ड पर निर्भर रहूंगा क्योंकि @jockeisorby ने सुझाव दिया, जबकि यह भी सुनिश्चित करना कि श्रोता सही तरीके से हटा दिया गया है (उसी फ़ंक्शन को प्रदान करने की आवश्यकता है घटना श्रोताओं को जोड़ने और हटाने दोनों के लिए)
स्टैकब्लिट्ज़ डेमो
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<string> = new EventEmitter<string>();
@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);
}
}
और फिर इसे इस तरह से उपयोग करें
<a role="button" [copy-clipboard]="'some stuff'" (copied)="notify($event)">
<i class="fa fa-clipboard"></i>
Copy
</a>
public notify(payload: string) {
// Might want to notify the user that something has been pushed to the clipboard
console.info(`'${payload}' has been copied to clipboard`);
}
नोट: सूचना window["clipboardData"]
IE के लिए आवश्यकता है क्योंकि यह समझ में नहीं आता हैe.clipboardData