javascript - 如何区分原生的Ctrl+C和Ctrl+V以及使用Javascript添加的文档级监听器

标签 javascript angular typescript dom

我有一个剪贴板服务,其中有一个 copy()paste() 方法,只要我执行 Ctrl+C 就会调用这些方法> & Ctrl+V。这些是使用 HostListeners 添加到组件中的文档级键盘监听器。现在,每当用户复制一些文本并执行 Ctrl+V 时,我的 paste() 方法就会被触发,这是不应该发生的。我怎样才能防止这种情况发生。谁能指出我正确的方向?

我的剪贴板服务:

export class ClipService {
    private srcFolder;
    private srcItem;

    constructor() {
    }

    copy(srcFolder, srcItem) {
        this.srcFolder = srcFolder;
        this.srcItem = srcItem;
    }

    paste(destFolder) {

    }

}

我的组件:

@Component({
 selector: 'new-comp',
 templateUrl: 'new-comp.html'
})
export class NewComp {

constructor(private clipboard: ClipService){

}

private keydown(event: KeyboardEvent) {
        if (event.defaultPrevented) return;
        let folder = this.folder.json;
        let item = folder.activeItem;
        if (event.ctrlKey && event.keyCode === 67) {
            this.clipboard.copy(folder, item);
        } else if (event.ctrlKey && event.keyCode === 86) {
             this.clipboard.paste(this.finder.activeFolder);
        }
    }
}

谢谢。

最佳答案

而不是使用键盘事件来处理复制和粘贴。只需使用剪贴板事件来处理它们,如下所示:

@HostListener('document:copy', ['$event'])
copy(evt: ClipboardEvent) {
 let folder = this.folder.json;
 let item = folder.activeItem;
 this.clipboard.copy(folder, item);
}

@HostListener('document:paste', ['$event'])
paste(evt: ClipboardEvent) {
 this.clipboard.paste(this.finder.activeFolder);
}

注意:IE11 不支持剪贴板复制事件。

希望这对您有所帮助。

关于javascript - 如何区分原生的Ctrl+C和Ctrl+V以及使用Javascript添加的文档级监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51791686/

相关文章:

javascript - NestJS 在生产中启用 cors

javascript - 如何计算每个选中的复选框

javascript - 如何将json数据发送到可序列化类

javascript - 无法通过 xmlhttprequest 加载本地 xml 文件

typescript - Firebase 部署 - 找不到本地依赖项的模块

javascript - 索引表达式不是类型

javascript - 全屏部分由 translateX 更改

angular - 为什么我的测试不使用服务 stub 方法?

javascript - 自定义表单控件 (ControlValueAccessor) 的绑定(bind) ngModel 总是将表单设置为脏状态

angular - 在 Angular 中获取复选框名称、值和选中状态