Я работаю в угловом проекте. В контроллере у нас есть кнопка, которая должна генерировать & скопировать код вставки (аналогичный youtube) в буфер обмена. Однако, в зависимости от типа элемента, код встраивания может быть создан/возвращен только вызовом ajax. Посмотрите на этот код:Невозможно скопировать данные в буфер обмена vanilla js/angular
function copyEmbed(e) {
var embedCode = '';
if (type === "typeA"){
api.items.compile.get({'id': item.selected.id},
function (response) {
embedCode = response.html; //<-- takes time to populate obviously
copyToClipboard();
});
} else {
embedCode = generateEmbedCodeTemplate(); //no ajax here. populates immediately
copyToClipboard();
}
function copyToClipboard() {
clipboard.copyText(); // all seems good but copying will fail as this function is not invoked with a click handler!
}
}
Проблема заключается в том, что из-за вызова Ajax, код, чтобы скопировать полученный код встраивания не может быть в функции copyEmbed сферы, так как это означает, что вызов Ajax не будет иметь чтобы получить данные перед копированием. Если бы я смог сделать все синхронным, я смог бы получить данные, а затем вызвать команду копирования из области действия функции copyEmbed, поэтому она не потерпит неудачу, так как функция copyEmbed привязана к событию клика. Однако в этом примере я обрабатываю права на ajax, но функция copyToClipboard не вызывается обработчиком кликов, поэтому команда копирования не выполняется. Любые идеи, не приводящие к хакерскому setIntervals для проверки содержимого embedCode?