如何在Angular 2 Typescript中复制到剪贴板?

And*_*uze 22 clipboard.js angular

有没有办法在Angular2 Typescript框架中复制剪贴板(多浏览器)中的文本?

我只找到使用Javascript的来源,例如

document.execCommand('copy')
Run Code Online (Sandbox Code Playgroud)

Thi*_*ier 37

您可以在clipboard.js库中实现Angular2指令.

首先将库配置为SystemJS:

<script>
  System.config({
    map: {
      clipboard: 'https://cdn.rawgit.com/zenorocha/clipboard.js/master/dist/clipboard.js'
    },
    packages: {
      'app': {
        defaultExtension: 'js'
      }
    } 
  });
  (...)
</script>
Run Code Online (Sandbox Code Playgroud)

我们希望能够通过指令在元素上附加剪贴板,并提供我们想要链接的DOM元素作为参数.指定目标元素中指定的值将用于复制其文本.以下是使用示例:

<div>
  <input #foo/>
  <button [clipboard]="foo">Copy</button>
</div>
Run Code Online (Sandbox Code Playgroud)

该指令的实施如下:

import {Directive,ElementRef,Input,Output,EventEmitter} from 'angular2/core';
import Clipboard from 'clipboard';

@Directive({
  selector: '[clipboard]'
})
export class ClipboardDirective {
  clipboard: Clipboard;

  @Input('clipboard')
  elt:ElementRef;

  @Output()
  clipboardSuccess:EventEmitter<any> = new EventEmitter();

  @Output()
  clipboardError:EventEmitter<any> = new EventEmitter();

  constructor(private eltRef:ElementRef) {
  }

  ngOnInit() {
    this.clipboard = new Clipboard(this.eltRef.nativeElement, {
      target: () => {
        return this.elt;
      }
    });

    this.clipboard.on('success', (e) => {
      this.clipboardSuccess.emit();
    });

    this.clipboard.on('error', (e) => {
      this.clipboardError.emit();
    });
  }

  ngOnDestroy() {
    if (this.clipboard) {
      this.clipboard.destroy();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

请参阅此plunkr获取示例:https://plnkr.co/edit/elyMcP5PX3UP4RkRQUG8?p = preview .


max*_*sam 24

感谢@ThierryTemplier,

根据他的回答,我整理了一个指令并在github和npm上分享.

这是github上的项目

更新:4/30/2017

这个库不再依赖于clipboard.js了.

只是角度!


dim*_*n d 22

我从https://github.com/pehu71/copy-component/blob/master/src/simple/copy.component.ts获得了一个方法 甚至可以在android 4.1.2上运行

copy(val) {

    let 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);
}
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢它!没有额外的包——只有几行代码。完美的。 (2认同)