Angular 5-클립 보드에 복사
클릭하면 사용자의 클립 보드에 변수를 저장하는 아이콘을 구현하려고합니다. 나는 현재 여러 라이브러리를 시도했지만 그중 어느 것도 그렇게 할 수 없었습니다.
Angular 5에서 사용자의 클립 보드에 변수를 올바르게 복사하려면 어떻게해야합니까?
해결 방법 1 : 텍스트 복사
HTML
<button (click)="copyMessage('This goes to Clipboard')" value="click to copy" >Copy this</button>
.ts 파일
copyMessage(val: string){
const selBox = document.createElement('textarea');
selBox.style.position = 'fixed';
selBox.style.left = '0';
selBox.style.top = '0';
selBox.style.opacity = '0';
selBox.value = val;
document.body.appendChild(selBox);
selBox.focus();
selBox.select();
document.execCommand('copy');
document.body.removeChild(selBox);
}
해결 방법 2 : TextBox에서 복사
HTML
<input type="text" value="User input Text to copy" #userinput>
<button (click)="copyInputMessage(userinput)" value="click to copy" >Copy from Textbox</button>
.ts 파일
/* To copy Text from Textbox */
copyInputMessage(inputElement){
inputElement.select();
document.execCommand('copy');
inputElement.setSelectionRange(0, 0);
}
해결 방법 3 : 타사 지시문 ngx-clipboard 가져 오기
<button class="btn btn-default" type="button" ngxClipboard [cbContent]="Text to be copied">copy</button>
솔루션 4 : 사용자 지정 지시문
사용자 지정 지시문 사용을 선호하는 경우 .NET을 사용하여 구현 된 우아한 솔루션 인 Dan Dohotaru의 답변 을 확인하십시오 ClipboardEvent
.
나는 이것이 이미 여기에서 많이 투표되었다는 것을 알고 있지만, 차라리 사용자 지정 지시문 접근 방식을 선택하고 @jockeisorby가 제안한대로 ClipboardEvent에 의존하는 동시에 리스너가 올바르게 제거되었는지 확인합니다 (동일한 기능을 제공해야 함). 이벤트 리스너 추가 및 제거)
stackblitz 데모
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
나는 이것이 텍스트를 복사 할 때 훨씬 더 깨끗한 해결책이라고 생각합니다.
copyToClipboard(item) {
document.addEventListener('copy', (e: ClipboardEvent) => {
e.clipboardData.setData('text/plain', (item));
e.preventDefault();
document.removeEventListener('copy', null);
});
document.execCommand('copy');
}
그런 다음 html의 클릭 이벤트에서 copyToClipboard를 호출하십시오. (클릭) = "copyToClipboard ( 'texttocopy')"
이벤트 처리기가 제대로 제거되지 않는 문제를 해결하는 jockeisorby의 답변 수정 버전.
copyToClipboard(item): void {
let listener = (e: ClipboardEvent) => {
e.clipboardData.setData('text/plain', (item));
e.preventDefault();
};
document.addEventListener('copy', listener);
document.execCommand('copy');
document.removeEventListener('copy', listener);
}
아래 방법은 메시지 복사에 사용할 수 있습니다.
export function copyTextAreaToClipBoard(message: string) {
const cleanText = message.replace(/<\/?[^>]+(>|$)/g, '');
const x = document.createElement('TEXTAREA') as HTMLTextAreaElement;
x.value = cleanText;
document.body.appendChild(x);
x.select();
document.execCommand('copy');
document.body.removeChild(x);
}
참고URL : https://stackoverflow.com/questions/49102724/angular-5-copy-to-clipboard
'developer tip' 카테고리의 다른 글
항목에서 슬라이드 슬라이드를 부트 스트랩하는 속도를 어떻게 제어 할 수 있습니까? (0) | 2020.10.20 |
---|---|
문자열에서 단어 세기 (0) | 2020.10.20 |
Android를 사용하여 내 애플리케이션에서 Wi-Fi 설정 화면을 호출하려면 어떻게해야합니까? (0) | 2020.10.20 |
IE에서 호환성보기를 비활성화하는 방법 (0) | 2020.10.20 |
Pandas 데이터 프레임 열 헤더를 모두 소문자로 만들려면 어떻게해야합니까? (0) | 2020.10.20 |