Angular - 获取粘贴事件内容

41

我有一个Angular组件,允许用户在


你尝试过在文本区域元素中使用[(ngModel)]作为属性吗?ngModel doc - Abel Valdez
2个回答

77

通过处理 input 事件,您可以从 paste 事件获取已粘贴的内容和 textarea 的更新后的内容:

<textarea #myText (paste)="onPaste($event)" (input)="onInput(myText.value)"></textarea>

使用以下代码:

onPaste(event: ClipboardEvent) {
  let clipboardData = event.clipboardData || window.clipboardData;
  let pastedText = clipboardData.getData('text');
  ...
}

onInput(content: string) {
  ...
}

请查看此 stackblitz以查看演示。


1
ClipboardEvent在Internet Explorer 11中不受支持。 - raffaeleambrosio
有什么线索可以解释为什么在添加(paste)="doSomething()"后无法在空输入框中粘贴?如果输入框中有任何字符,我就可以进行粘贴,但如果为空,则无法进行粘贴。 - fabio984

11

这是来自一个使用Angular2 TypeScript的示例,已经在我的项目中运行。希望它能帮助到别人。逻辑同样适用于其他情况。

  1. angular-clipboard-event.html
<textarea placeholder="Type a message" (paste)="onPaste($event)"></textarea>
<!-- Place to render the image -->
<img #imgRenderer />
  1. angular-clipboard-event.ts
// Reference to the dom element
@ViewChild('imgRenderer') imgRenderer: ElementRef;

onPaste(event: any) {
    const items = (event.clipboardData || event.originalEvent.clipboardData).items;
    let blob = null;

    for (const item of items) {
      if (item.type.indexOf('image') === 0) {
        blob = item.getAsFile();
      }
    }

    // load image if there is a pasted image
    if (blob !== null) {
      const reader = new FileReader();
      reader.onload = (evt: any) => {
        console.log(evt.target.result); // data url!
        this.imgRenderer.nativeElement.src = evt.target.result;
      };
      reader.readAsDataURL(blob);
    }
  }

谢谢@Sandeep,有没有从用户界面处理的方法或代码来代替Ctrl + V粘贴呢? - Alam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接