Je recherche une solution qui me permette de coller ce qui existe dans le presse-papiers lorsqu'un utilisateur clique sur un bouton dans Angular.
J'ai utilisé ce code pour coller des données lorsque l'utilisateur tape Ctrl + V mais je suis bloqué comment déclencher cet événement lorsque l'utilisateur déclenche l'événement, cliquez sur un bouton.
constructor() {
document.addEventListener('paste', (e: ClipboardEvent) => {
console.log(e.clipboardData.getData('Text'));
e.preventDefault();
e.stopPropagation();
});
}
copyFromClipBoard(event) {
// My Code goes here
}
3 Réponses :
Vous pouvez utiliser l ' API Clipboard pour accéder à presse-papiers du système. La méthode readText () renvoie une promesse qui se résout en texte copié dans le presse-papiers système:
Modèle:
handleClick() {
// using bracket notation as TypeScript may complain about `clipboard` property
navigator['clipboard'].readText().then(clipText => {
// do something with copied text here
});
}
Composant: p >
<button (click)="handleClick()">Click Me</button>
Voici un exemple en action.
J'espère que cela vous aidera!
Merci, j'ai essayé cette solution mais malheureusement elle ne fonctionne pas sur IE11
Vous devez préciser que dans votre question vous devez prendre en charge IE11. Vous devriez également probablement créer un StackBlitz ou similaire pour aider à clarifier le type d'élément avec lequel vous travaillez. Vous pouvez utiliser les techniques héritées décrites ici a>. Vous devrez probablement utiliser l'élément ref pour vous concentrer sur une zone d'entrée / de texte pour exécuter le collage via document.execCommand ("coller") . Dans tous les cas, plus d'informations sont nécessaires concernant votre modèle.
Vous avez raison, je vais créer un StackBiltz la prochaine fois, c'est bien mieux qu'un simple code. Je dois vous remercier pour votre code, je le mélange avec la spécification IE et cela fonctionne.
copyFromClipBoard() {
/// For IE
if (window['clipboardData']) {
let value = window['clipboardData'].getData('Text');
console.log(value);
}
else {
// for other navigators
navigator['clipboard'].readText().then(clipText => {
console.log(clipText);
});
}
}
Le moyen le plus simple de le faire est d'utiliser Renderer2 et ElementRef d'Angular.
Vous pouvez simplement injecter Renderer2 dans votre composant / directive et écoutez l'événement paste et faites votre travail:
renderer.listen(element.nativeElement, 'copy', (event) => {
// do your stuff
});
renderer.listen(element.nativeElement, 'paste', (event) => {
// Do your thing here
});
et la classe de composant interne écoutent l'événement copier / coller :
XXX
Voyez, si cela vous est utile. stackoverflow.com/questions/51395393/…
J'ai vu cet article mais je disais s'il existe une nouvelle solution pour angular 6 ou un nouveau crochet pour obtenir les données du presse-papiers