1

私はページがaddin.htmlです。それは次に、2つのページがそれぞれのリスナー内部を持っている、と非同期通信クロスページ

// 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をポップアップすることができます

editorは、ui-routerによって実現されます。最初は、それはページをロードする前にinitを解決しますaddin.htmlポップアップeditor、ページを読み込む前に、それはeditorにいくつかのデータを送信し、initは、このデータを解決する必要があるとき、私は今、実装したい何

.state('editor', { 
    controller: 'EditorCtrl', 
    resolve: { init: [ ... ] }, 
    ... 
}; 

app.controller('EditorCtrl', ['$scope', 'init', function ($scope, 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

関連する問題