javascript - tipos - Comunicación asincrónica páginas cruzadas
tipos de comunicacion sincronica (1)
Tengo una página addin.html . Puede mostrar otro editor página (que no necesariamente está en el mismo dominio)
popup = window.open("https://localhost:3000/#/posts/editor/", "popup")
Luego, las dos páginas tienen a cada oyente dentro y pueden enviarse datos entre ellos
// 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);
}
editor es realizado por ui-router . Inicialmente, resuelve init antes de cargar la página:
.state(''editor'', {
controller: ''EditorCtrl'',
resolve: { init: [ ... ] },
...
};
app.controller(''EditorCtrl'', [''$scope'', ''init'', function ($scope, init) {
...
}]
Lo que quiero implementar ahora es, cuando addin.html editor , envía algunos datos al editor , e init necesita resolver estos datos, antes de cargar la página. editor podría bloquearse antes de recibir los datos de addin.html .
¿Alguien sabe cómo enmendar los receptores y remitentes (y algo más) para lograr esto?
Puede devolver una promesa personalizada y resolverla cuando lo desee como el siguiente código
.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;
}
}
});
El controlador espera que el elemento anterior se resuelva por completo antes de la creación de instancias.