Я обновляю/переписываю существующее угловое приложение для использования углового2. Моя проблема заключается в том, что я хочу открыть поток OAuth в новом всплывающем окне, и как только поток OAuth будет завершен, используйте window.postMessage для обратной связи с угловым 2, что поток OAuth был успешным.Oauth 2 popup with Angular 2
В настоящее время, что я имею в угловом 2 сервиса
export class ApiService {
constructor(private _loggedInService: LoggedInService) {
window.addEventListener('message', this.onPostMessage, false);
}
startOAuthFlow() {
var options = 'left=100,top=10,width=400,height=500';
window.open('http://site/connect-auth', , options);
}
onPostMessage(event) {
if(event.data.status === "200") {
// Use an EventEmitter to notify the other components that user logged in
this._loggedInService.Stream.emit(null);
}
}
}
Этот шаблон, который загружается в конце OAuth потока
<html>
<head>
<title>OAuth callback</title>
<script>
var POST_ORIGIN_URI = 'localhost:8000';
var message = {"status": "200", "jwt":"2"};
window.opener.postMessage(message, POST_ORIGIN_URI);
window.close();
</script>
</head>
</html>
Использование window.addEventListener
, как это, кажется, полностью разорвать угловое приложение 2, разыменование this
.
Так что мой вопрос в том, могу ли я использовать window.addEventListener, или я не должен использовать postMessage для связи обратно в приложение angular2?
** Полный angular2 нуба так что любая помощь ценится
любая идея, как это можно сделать теперь, когда 'BrowserDomAdapter' больше не экспортируется в угловые 2 RC? – simon
update: на самом деле вы можете просто использовать 'window.addEventListener' - важная часть, как вы указываете, использует анонимную функцию для сохранения контекста выполнения. Благодаря! – simon
Здравствуйте, возможно ли, что если получать сообщение с того же компьютера, но с другим портом? Я хочу отправить данные из моего jsp/java (порт 8080) в angular2 listener (порт 4200). –