Как получить данные буфера обмена в angular JS

Я действительно искал, чтобы получить содержимое буфера обмена, используя angular JS, чтобы имитировать объект для копирования.

Ответы

Ответ 1

Я создал директиву для копирования в буфер обмена, в которой используется метод 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> 

Ответ 2

здесь краткую версию, которую я использую -

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();
}

Ответ 3

BTW, если вы используете Angular для копирования в буфер обмена с помощью приложения Chrome Packaged, выполните следующие действия:

  • Добавьте "clipboardRead" и "clipboardWrite" к "разрешениям" в манифесте. json.
  • используйте ng-click в вашем представлении, чтобы скопировать значение в область контроллера $, например: data-ng-click = "copyUrlToClipboard (file.webContentLink)"
  • Поместите функцию в свой контроллер следующим образом:

    $scope.copyUrlToClipboard =  function(url) {
        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');
    }

Ответ 4

У меня была та же проблема, и я использовал функцию angular -clipboard [1], которая использует новые API выбора и API буфера обмена, доступные в последних браузерах.

Сначала мы должны установить angular -clipboard lib, я использую беседу.

$ 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

Спасибо,