2017-01-03 11 views
0

Я работаю в угловом проекте. В контроллере у нас есть кнопка, которая должна генерировать & скопировать код вставки (аналогичный 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?

ответ

0

Как всегда, обращение к асинхронному материалу может происходить только путем фактического обращения с ними в асинхронном режиме. Поэтому вместо того, чтобы захватывать код вставки во время нажатия кнопки, я делаю это раньше, поэтому он доступен как переменная или атрибут data элемента, который нужно щелкнуть. Только добавляя ответ для людей, которые могли бы прийти сюда с тем же самым мозгом, что и когда я его открыл.