2017-01-03 8 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関数はクリックハンドラで呼び出されないため、copyコマンドは失敗します。どんなアイデアでも、embedCodeの内容をチェックするためにハッキングされたsetIntervalsが発生することはありませんか?

答えて

0

いつものように、非同期の処理は、実際には非同期で処理することによってのみ可能です。そのため、ボタンクリック時に埋め込みコードを取得するのではなく、前に行っているので、クリックする要素の変数またはデータ属性として使用できます。私がそれを開いたときに持っていたのと同じbrainfartでここに来るかもしれない人々のための答えを加えるだけ。

関連する問題