在Angular中捕获粘贴事件

时间:2019-01-07 15:19:08

标签: angular

我正在寻找一种解决方案,当用户单击Angular中的按钮时,它可以粘贴剪贴板中的内容。

当用户键入Ctrl + V时,我曾使用此代码粘贴数据,但是当用户单击按钮时,我将无法触发该事件。

 constructor() {
document.addEventListener('paste', (e: ClipboardEvent) => {
  console.log(e.clipboardData.getData('Text'));
  e.preventDefault();
  e.stopPropagation();
});

}

 copyFromClipBoard(event) {
    // My Code goes here
  }

3 个答案:

答案 0 :(得分:1)

您可以使用Clipboard API来访问系统剪贴板。 readText()方法返回一个承诺,该承诺可以解析为系统剪贴板上复制的文本:

模板:

<button (click)="handleClick()">Click Me</button>

组件:

handleClick() {
  // using bracket notation as TypeScript may complain about `clipboard` property
  navigator['clipboard'].readText().then(clipText => {
    // do something with copied text here
  });
}

这里是example的动作。

希望有帮助!

答案 1 :(得分:1)

最简单的方法是使用Angular中的Renderer2ElementRef

您只需在组件/指令中插入Renderer2并听粘贴事件并做您的事情:

constructor(element: ElementRef, renderer: Renderer2) {}

和内部组件类监听复制/粘贴事件:

 renderer.listen(element.nativeElement, 'copy', (event) => {
      // do your stuff
    });

    renderer.listen(element.nativeElement, 'paste', (event) => {
      // Do your thing here
    });

答案 2 :(得分:0)

copyFromClipBoard() {   
    /// For IE
    if (window['clipboardData']) {
      let value = window['clipboardData'].getData('Text');
      console.log(value);
    }
    else {
      // for other navigators
      navigator['clipboard'].readText().then(clipText => {        
        console.log(clipText);
      });
    }
  }