ngOnit не выполняется, когда модуль app-routing загружает компонент - PullRequest
1 голос
/ 03 мая 2020

Этот ngOnInit не выполняет строку console.log

ngOnInit() {
  this.loadBlogPosts();
  this.authStatusService.getAuthUsername().subscribe(
    status => {
      // got username status
      console.log("This is the username status from home", status);
      this.authUsername = status;
    }
  );
}

Эта строка выполняется

this.loadBlogPosts();

Эта строка не выполняется:

console.log("This is the username status from home", status);

Это app-module.ts.

const routes: Routes = [
  { path: '', component: HomeComponent, pathMatch: 'full' },

  { path: 'home', component: HomeComponent },
  { path: 'add', component: BlogPostAddEditComponent  },
  { path: 'posts', component: BlogPostsComponent },
  { path: 'post', component: BlogPostComponent },
  { path: 'auth', component: AuthComponent },
  { path: 'blogpost/:id', component: BlogPostComponent },
  { path: '**', redirectTo: '/' }
];



Это app.component. html

<app-headernav></app-headernav>
<router-outlet></router-outlet>

Это услуга:

export class AuthStatusService {

  authUsernameChange: Subject<string> = new Subject<string>();

  constructor() { }


  public getAuthUsername(): Observable<string> {
     return this.authUsernameChange.asObservable();
   }

   public setAuthUsername(user: string) {
       this.authUsernameChange.next(user);
     }
}

1 Ответ

2 голосов
/ 03 мая 2020

Здесь нет ничего плохого в ngOnInit. this.authStatusService.getAuthUsername() возвращает наблюдаемое, поэтому обработчик в этом коде:

this.authStatusService.getAuthUsername().subscribe(
    status => {
      // got username status
      console.log("This is the username status from home", status);
      this.authUsername = status;
    }
  );

будет выполняться только тогда, когда наблюдаемое выдает новое значение. ngOnInit только регистрирует метод наблюдаемого обработчика. Вам нужно передать значение где-нибудь после вызова ngOnInit, возможно, с this.authStatusService.setAuthUsername(something); Если вам нужно последнее значение, вы должны использовать BehaviorSubject вместо Subject в authUsernameChange

 authUsernameChange: BehaviorSubject <string> = new BehaviorSubject <string>(initialValue);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...