私は実際にangular JSを使用してコピーボードの内容をシミュレートするためにJSを使用してクリップボードのコンテンツを取得することを探していました。
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>
ここに私が使用する簡潔なバージョンがあります-
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();
}
ところで、Angularを使用してChrome Packaged Appでクリップボードにコピーする場合は、次のようにします。
次のような関数をコントローラーに配置します。
$ 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'); }
同じ問題があり、最新のブラウザで利用可能な新しい選択APIとクリップボードAPIを使用する角度クリップボード機能[1]を使用しました。
まず、angular-clipboard libをインストールする必要があります。私はbowerを使用しています。
$ 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
おかげで、
完全に異なるアプローチ:
ウィンドウ間でテキストをコピーして貼り付ける必要があるため、ローカルストレージにデータを保存(コピー)するために this を使用しました。次に、別のウィンドウで、同じキーを使用してローカルストレージからロードし、「貼り付け」を行います。