2017-01-03 1 views
0

저는 각도 프로젝트에서 작업하고 있습니다. 컨트롤러에는 &을 생성하는 버튼이있어 클립 보드에 소스 코드 (YouTube와 유사)를 복사합니다. 그러나 항목 유형에 따라 포함 코드는 ajax 호출에 의해서만 생성/반환 될 수 있습니다. 이 코드를 살펴 유무 :클립 보드에 데이터를 복사 할 수 없습니다. 바닐라 js/각도

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! 
    } 
} 

문제 아약스 호출, 코드의 copyEmbed 기능 범위에있을 수없는 결과 소스 코드를 복사 할 수 있기 때문에이 아약스 호출이이 없습니다 수단이다 복사하기 전에 데이터를 가져올 시간. 모든 것을 동기식으로 만들 수 있었다면 데이터를 가져온 다음 copyEmbed 함수의 범위 내에서 copy 명령을 호출 할 수 있으므로 copyEmbed 함수가 click 이벤트에 바인딩되므로 실패하지는 않습니다. 그러나이 예제에서는 ajax 호출을 올바르게 처리하지만 copyToClipboard 함수는 클릭 핸들러와 함께 호출되지 않으므로 복사 명령이 실패합니다. embedCode 내용을 확인하기위한 해킹 setIntervals의 결과가없는 어떤 아이디어라도 있습니까?

답변

0

항상 그렇듯이 비동기 처리는 비동기 방식으로 처리하는 경우에만 발생할 수 있습니다. 따라서 버튼 클릭시 embed 코드를 가져 오는 대신 이전에 그렇게하고 있기 때문에 클릭 할 요소의 변수 또는 데이터 속성으로 사용할 수 있습니다. 내가 그것을 열었을 때와 똑같은 뇌간으로 여기에 올 수있는 사람들을 위해서만 대답을 추가하십시오.