angular 5 означает вход на сторонний веб-сайт, проблемы с маршрутизацией

В моем компоненте заголовка у меня есть кнопка входа, которая регистрирует меня на стороннем веб-сайте. Приложение sc2 инициализируется в компоненте заголовка с callbackURL. В заголовке я получаю LoginURL, который используется для подключения к sc2. К loginURL я могу добавить состояние, которое в моем случае представляет собой просто строку с идентификатором текущей страницы, на которой я нахожусь, это возвращается в параметрах URL-адреса обратного вызова. Проблема в том, что заголовок никогда не обновляется состоянием, поскольку URL-адрес обратного вызова вызывает основной компонент (который загружается в маршрутизаторе-выходе). Сам заголовок загружается над основным компонентом. Я не могу заставить основной компонент перенаправить на исходный компонент. До того, как я переместил кнопку из основного компонента в компонент заголовка, все работало, теперь состояние, которое отправляется в основной компонент, не обновляется до последней страницы, поэтому я не могу перенаправить его через основной компонент на исходный . страница используется. Я попробовал messageService и использовал localStorage, но похоже, что компонент заголовка никогда не обновляется вовремя. URL-адрес обратного вызова всегда относится к основному компоненту. Могу ли я напрямую общаться с компонентом заголовка?

app.component

  <app-header> </app-header>

  <router-outlet> </router-outlet>


  this.api = sc2.Initialize({
  app: 'someName.app',
  //  callbackURL: 'http://localhost/main/',
  callbackURL: this.callBackURL,
  accessToken: this.accessToken,
  scope: ['vote', 'comment']
 });


 this.loginUrl =  this.api.getLoginURL(this.state)

page.component.ts

     constructor() {
        this.newStateService.setState("page")
        this.newStateService.setCoinId("pageId")
        this.newStateService.changeMessageCoinId(this.coinId)
            const params = new HttpParams().set('_id', this.coinId);
       }

Заголовок component.ts

  constructor() {

   this.newStateService.currentMessageState
   .takeWhile(() => this.alive)
  .subscribe(message => { 
  this.state = message
  })


 this.newStateService.currentMessageCoinId
  .takeWhile(() => this.alive)
  .subscribe(message => { 
  this.coinId= message
  })
 this.stateText = newStateService.getState();
 this.coinId = newStateService.getCoinId();  }

person oudekaas    schedule 31.01.2018    source источник
comment
Улучшенное форматирование кода   -  person Vega    schedule 01.02.2018


Ответы (1)


проблемы с зоной, с которыми вы сталкиваетесь, поэтому вы можете использовать этот метод

import { ApplicationRef } from '@angular/core';
constructor(
private _applicationRef: ApplicationRef) {}

this.router.navigate(['/router']).then(() => {
    this._applicationRef.tick();
});
person Ashok Pal    schedule 26.05.2018