Copy text to clipboard by clicking a button, without using Flash. This is using the new Selection API and Clipboard API available in the latest browsers.
Browser support: Chrome 43+, Firefox 41+, Opera 29+ and IE10+.
See the demo.
Install using npm
or bower
:
$ npm install angular-clipboard --save
$ bower install angular-clipboard --save
angular-clipboard has no other dependencies than Angular itself.
Require angular-clipboard as a dependency for your app:
angular.module('MyApp', ['angular-clipboard'])
.controller('MyController', ['$scope', function ($scope) {
$scope.textToCopy = 'I can copy by clicking!';
$scope.success = function () {
console.log('Copied!');
};
$scope.fail = function (err) {
console.error('Error!', err);
};
}]);
Copy text from an input field by clicking a button:
<input type="text" ng-model="textToCopy">
<button clipboard text="textToCopy" on-copied="success()" on-error="fail(err)">Copy</button>
You can supply a method to be called for the on-copied
and on-error
event. The on-error
function will be called with the error object as argument err
.
You can also invoke the copy to clipboard action directly by injecting the clipboard
service. Just remember it has to be in a click event, as clipboard access requires user action.
angular.module('MyApp', ['angular-clipboard'])
.controller('MyController', ['$scope', 'clipboard', function ($scope, clipboard) {
$scope.clickHandler = function () {
clipboard.copyText('Copy this text');
};
}]);
If you are using a module loader, you can import the module name when requiring it in angular. Works with any AMD/UMD/CommonJS module loader.
import clipboardModule from 'angular-clipboard';
angular.module('mymodule', [clipboardModule.name]);