2017-01-03 68 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函數的範圍內調用copy命令,因此它不會失敗,因爲copyEmbed函數綁定到單擊事件。然而,在這個例子中,我正在處理ajax調用權限,但是copyToClipboard函數沒有被點擊處理程序調用,所以複製命令失敗。任何想法,而不會導致hacky setIntervals檢查embedCode內容?

回答

0

一如既往,處理異步的東西只能通過以異步方式實際處理它們而發生。因此,在點擊按鈕時不要抓取嵌入代碼,而是在之前這樣做,因此它可以作爲要單擊的元素的變量或數據屬性。只有當我打開它的時候,爲那些可能會帶着同樣的腦力激盪而來的人添加答案。