В сервисе Injected Angular 7 метод установлен как неопределенный при вызове из обработчика подписки rxjs - PullRequest
1 голос
/ 05 мая 2019

Я видел другие посты, касающиеся этого, однако я проверил все остальные предложения, и у меня уже есть их.

У меня есть Angular 7 / Ionic 4 проект, где у меня есть следующий сервис ..

    @Injectable({
      providedIn: 'root'
    })

    export class AppRoutingService { 
    ...

И это заявлено в моем основном модуле ...

    @NgModule({
      imports: [SharedModule, HttpClientModule],
      declarations: [],
      exports: [],
      providers: [
        ...
        AppRoutingService
      ]  

Я внедряю и использую этот сервис везде без проблем.Но у меня есть один случай, когда я хочу использовать его по подписке rxjs.

rxjs Subject находится в другой службе, которую я использую для мониторинга состояния входа в систему ...

 export class LoginService {
      private loggedIn: boolean = false;

      public loggedInStateUpdate: Subject<boolean>;

И когда состояние входа меняется, я просто звоню дальше по этому Subject.

Теперь, в другой области, где возникла проблема, я подписываюсь на это ..

this.loginService.loggedInStateUpdate.subscribe(isLoggedIn => 
     this.gotoLoginPage(isLoggedIn));

Код gotoLoginPage был просто встроенным, но я столкнулся с методом при возникновении этой проблемы.Все, что у него есть, это следующее ..

    private gotoLoginPage(isLoggedIn : boolean) : void {
        try {
          if (isLoggedIn)
            return;

          this.availablePagesService.currentPageRoutePath = Constants.vals.pageRoutePaths.login;
          this.appRoutingService.navigateRoot(Constants.vals.pageRoutePaths.login);  
        } catch (error) {
           this.logger.error(`gotoLoginPage: ${error}`);
        }    
      }

Теперь, сумасшедшая вещь, вдруг метод, который я хочу вызвать, не определен!

enter image description here

И это было ранее определено, как код, перед тем как подписка успешно его назвала ..

enter image description here

Если я посмотрю на мой this в окне просмотра vscode все на моем this выглядит как положено.Все другие внедренные сервисы имеют все внутренние компоненты, определенные как ожидалось.

Однако, в этом сервисе мы видим, что метод navigateRoot не определен, но он отображается как функция в __proto__.

enter image description here

Я никогда не видел этого раньше!

Есть ли у кого-нибудь идеи, что здесь может быть не так?Я не вижу, в чем разница с этим сервисом.Он объявлен и предоставлен в root, как и большинство других моих услуг.

Заранее благодарен за предложения

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