Angular [ngPaste]中的"粘贴"事件

Web*_*nik 8 javascript angularjs angularjs-directive

如何在Angular 1.1.5的输入中执行"粘贴"事件的功能?我知道有一个ng-change输入指令.但每次输入更改时它都会触发,我在初始粘贴时只需要一次.

用例:我有一个URL输入.我想在用户粘贴URL后执行一个函数.用户也可以手动输入URL并按Enter键执行该功能.

-

更新:自Angular 1.2.0起,ngPaste是一个原生指令.

Web*_*nik 28

从Angular 1.2.0开始,有一个ngPaste指令.使用以下方式:

<input type='text' ng-paste='handlePaste($event)'>
Run Code Online (Sandbox Code Playgroud)

要立即传递价值,请使用:

<input type='text' ng-paste='handlePaste($event.clipboardData.getData('text/plain'))'>
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,没有`$ event.clipboardData`,但有`$ event.originalEvent` (2认同)

Lev*_*sha 9

在功能中你应该使用originalEvent

 <input type="text" ng-paste="paste($event)" />
Run Code Online (Sandbox Code Playgroud)

功能:

$scope.paste = function (e) {
    console.log(e.originalEvent.clipboardData.getData('text/plain'));
}
Run Code Online (Sandbox Code Playgroud)


Fir*_*rze 5

想要分享我的解决方案以支持没有剪贴板API的浏览器。这可以在任何角度支持的浏览器上使用。

HTML:

<input type="text" ng-paste="copyPasted($event)">
Run Code Online (Sandbox Code Playgroud)

JS:

$scope.copyPasted = function ($event){
    if(typeof $event.originalEvent.clipboardData !== "undefined"){
        $scope.handlePastedData($event.originalEvent.clipboardData.getData('text/plain'));
    } else { // To support browsers without clipboard API (IE and older browsers)
        $timeout(function(){
            $scope.handlePastedData(angular.element($event.currentTarget).val());
        });
    }
};
Run Code Online (Sandbox Code Playgroud)