Как сделать так, чтобы это.буфер обмена.копирование работало внутри подписки?

#angular #clipboard

Вопрос:

Простая копия буфера обмена работает, пока я не переместил ее в подписку

Работает

 copyStuff() {
  this.clipboard.copy('xxxxxxxx');
}
 

Не работает

 copyStuff() {
  this.service.getText()
    .subscribe({
      next: () => {
        this.clipboard.copy('xxxxxxxx');
        console.log('here')
      }
    })
}
 

Есть идеи, как это исправить? Я уже пробовал setTimeout и var that = это.

К сожалению, за пределами моего проекта все работает так, как и ожидалось.

https://stackblitz.com/edit/angular-hs66nf?file=src/app/cdk-clipboard-overview-example.ts

Но в моем проекте мне нужно нажать кнопку 3 раза(так что 3 запроса), чтобы скопировать текст. Щелчок один или два раза не работает.

Комментарии:

1. Что такое буфер обмена? Вы используете угловой CDK или что? Простое воспроизведение было бы здорово.

2. Да, угловой cdk, импортируйте { буфер обмена } из «@угловой/cdk/буфер обмена»;

Ответ №1:

Ну, каким-то образом страница теряла фокус, и я думаю, что буфер обмена cdk не выходил с ошибкой. Я переключился на навигатор.буфер обмена.writeText, и это вышло с ошибкой.

Прежде чем текст был готов к копированию, я теперь перефокусировал нажатую кнопку.

 copySomething(ref: MatButton) {
     this.service.get(user._id).subscribe(
        {
          next: resp => {
            ref.focus();
            navigator.clipboard.writeText(resp.text)
              .then().catch(e => console.error(e));
            this.notifyService.notify(Copied!', 3000);
          }
        }
      )
}