2015-01-14 3 views
8

У меня есть два разных угловых приложения. Мне нужно открыть представление 'app_2', используя iframe в 'app_1'. Мне также нужно отправить некоторые данные из 'app_1' в 'app_2'. Как достичь этого в angularJS?Как общаться с использованием iframe между двумя угловыми приложениями?

Заранее спасибо. #SOS

+0

почему ты оказывают эти два приложения в двух разных iframe? Чего вы достигнете, выполнив это? –

ответ

14

Я хотел бы использовать рассмотреть возможность использования postMessage ...

В угловых терминах это означает, что одно приложение будет отправлять сообщения, а другой один будет слушать сообщения.

Так на приложение, которое сидит внутри фрейма вы можете сделать завод, который делает следующее:

/** 
* App that sits within iframe: 
* 
* Inject this factory into your controller and call 
* iFrame.messageParentIframe({hello: 'world'}) to send messages 
* to the parent iFrame 
*/ 
angular 
    .module('app') 
    .factory('iFrameMessenger', function($window) { 
    return { 
     messageParentIframe: function(message) { 
     $window.parent.postMessage(message, '*'); 
     } 
    }; 
    }); 

На родительском плавающем фрейме ваш код должен выглядеть примерно так:

/** 
* App that is on parent iframe: 
* 
* Just using a controller for the sake of simplicity, 
* but you could also use a Factory that only receives 
* messages from iFrames and handle them according to each 
* action, etc. You can get creative here on how you want 
* to handle it. 
*/ 
angular 
    .module('app') 
    .controller('AppCtrl', function($window) { 
    $window.addEventListener('message', function() { 
     // handle messages received from iframe 
    }); 
    }); 
+3

Мне хотелось чего-то подобного ... Большое спасибо @sergiocruz :) –

+0

Отличный пример. Я думаю, вы должны вызвать removeEventListener() из события $ destroy в AppCtrl, чтобы убедиться, что ничего не просочилось. – Damiox

+0

Как насчет того, чтобы другой был рядом (родитель, отправляющий сообщение ребенку iFrame), поэтому у нас есть полный пример обсуждения между ними? – Ksyqo

Смежные вопросы