15

我实际上是在寻找使用 Angular JS 来模拟复制粘贴的东西来获取剪贴板的内容。

4

5 回答 5

9

我创建了一个使用document.execCommand()方法复制到剪贴板的指令。

指示

(function() {
app.directive('copyToClipboard',  function ($window) {
        var body = angular.element($window.document.body);
        var textarea = angular.element('<textarea/>');
        textarea.css({
            position: 'fixed',
            opacity: '0'
        });

        function copy(toCopy) {
            textarea.val(toCopy);
            body.append(textarea);
            textarea[0].select();

            try {
                var successful = document.execCommand('copy');
                if (!successful) throw successful;
            } catch (err) {
                console.log("failed to copy", toCopy);
            }
            textarea.remove();
        }

        return {
            restrict: 'A',
            link: function (scope, element, attrs) {
                element.bind('click', function (e) {
                    copy(attrs.copyToClipboard);
                });
            }
        }
    })
}).call(this);    

html

<button  copy-to-clipboard="Copy Me!!!!" class="button">COPY</button> 
于 2016-02-04T03:55:56.353 回答
4

这是我使用的简洁版本 -

function copyToClipboard(data) {
    angular.element('<textarea/>')
        .css({ 'opacity' : '0', 'position' : 'fixed' })
        .text(data)
        .appendTo(angular.element($window.document.body))
        .select()
        .each(function() { document.execCommand('copy') })
        .remove();
}
于 2016-08-19T01:51:00.430 回答
2

顺便说一句,如果使用 Angular 通过 Chrome 打包应用程序复制到剪贴板,请执行以下操作:

  1. 将“clipboardRead”和“clipboardWrite”添加到 manifest.json 中的“permissions”。
  2. 在视图中使用 ng-click 将值提供给控制器 $scope,例如:data-ng-click="copyUrlToClipboard(file.webContentLink)"
  3. 在您的控制器中放置一个函数,例如:

    $scope.copyUrlToClipboard = 功能(网址){
        var copyFrom = document.createElement("textarea");
        copyFrom.textContent = url;
        var body = document.getElementsByTagName('body')[0];
        body.appendChild(copyFrom);
        copyFrom.select();
        document.execCommand('copy');
        body.removeChild(copyFrom);
        this.flashMessage('over5');
    }
于 2014-10-30T18:18:37.653 回答
0

完全不同的方法:

我需要在窗口之间复制和粘贴文本,所以我用来保存(复制)数据到本地存储。然后,在另一个窗口中,我使用相同的键将其从本地存储中加载出来,然后我可以随意“粘贴”。

于 2018-10-01T14:49:31.770 回答
0

我遇到了同样的问题,我使用了 angular-clipboard 功能[1],它使用了最新浏览器中可用的新选择 API 和剪贴板 API。

首先我们必须安装 angular-clipboard 库,我使用的是凉亭。

$ bower install angular-clipboard --save

要导入模块,请在 html 中使用以下内容。

<script src="../../bower_components/angular-clipboard/angular-clipboard.js"></script>

在控制器中使用 $scope 为元素设置值

$scope.textToCopy = 'Testing clip board';

使用加载剪贴板模块,

angular.module('testmodule', ['angular-clipboard']);

这适用于 Chrome 43+、Firefox 41+、Opera 29+ 和 IE10+。

它简单且工作正常。

[1] https://www.npmjs.com/package/angular-clipboard

谢谢,

于 2017-05-03T08:47:00.943 回答