1

페이지가 addin.html입니다. 그런 다음, 두 페이지를 각각 하나의 수신기 내부 있고,비동기 통신 크로스 페이지

// listen: 
function receiveMessage(event) { 
    document.getElementById("display").innerHTML = JSON.stringify(event.data); 
} 
window.addEventListener("message", receiveMessage, false); 

// send: 
function sendMessage() { 
    popup.postMessage("data", popup.location.href); 
} 
에 의해 서로 데이터를 전송할 수 있습니다

popup = window.open("https://localhost:3000/#/posts/editor/", "popup") 

에 의해 (동일한 도메인에 필요없는) 다른 페이지 editor 팝업 수 있습니다

editorui-router으로 구현됩니다. 페이지를로드하기 전에,

이며, addin.html 팝업 editor, 그것은 일부 editor 데이터 및 init 요구를 보낸다 내가 지금 구현하려는
.state('editor', { 
    controller: 'EditorCtrl', 
    resolve: { init: [ ... ] }, 
    ... 
}; 

app.controller('EditorCtrl', ['$scope', 'init', function ($scope, init) { 
    ... 
}] 

이 데이터를 해결하기 : 처음에, 그것은 페이지를로드하기 전에 init 해결 . 에서 데이터를 수신하기 전에editor이 멈출 수 있습니다.

누구든지 수신자와 발신자 (및 다른 사람)를 수정하는 방법을 알고 있습니까?

+0

URL 매개 변수로이 초기 데이터를 전달할 수 없습니까? –

+0

많은 양의 데이터가있을 수 있습니다. 어떻게 그들을'window.open'에 삽입 할 수 있습니까? – SoftTimur

+0

많은 선택권이 없습니다. 데이터가 너무 크면 서버 측 세션을 사용하여 데이터를 저장하고 검색하십시오. 또는 POST로 데이터를 전송하십시오. – estus

답변

0

사용자 지정 약속을 반환하고 다음 코드 위의 항목이 완전히 인스턴스화하기 전에 해결해야하는 컨트롤러는 대기

.state('editor', { 
    controller: 'EditorCtrl', 
    resolve:{ 
    init: function($q){ 
     var deferred = $q.defer(); 
     window.addEventListener("message", function(event){ 
       deferred.resolve(event.data); 
     }, false); 
     return deferred.promise; 
    } 
    } 
}); 

로 원할 때마다 그것을 해결할 수 있습니다.

+0

고맙습니다 ... 테스트하지 않았으므로 시각적으로 사용자가 해결하기 전에 무엇을 볼 수 있습니까? 빈 페이지가 있습니까? – SoftTimur

+1

안녕하세요, 예 ui-view는 http://stackoverflow.com/questions/18961332/angular-u-router-show-loading-animation-during-resolve-process를 해결하기 전에 비어 있습니다. – fingerpich

+0

테스트 결과 작동합니다. . – SoftTimur