Обмен данными между компонентами Angular

#javascript #angular

#javascript #angular

Вопрос:

Я новичок в angular 6. Я создаю проект с использованием angular 6. Я сталкиваюсь с проблемой при совместном использовании данных. Вот структура проекта:

1) Компонент заголовка 2) Компонент входа 3) Домашний компонент 4) Общий сервис

Я добавляю класс в свой компонент заголовка на основе текущего маршрута. Это работало при обновлении страницы. Но когда я перехожу от одного компонента к другому, это не работает.

Вот код:

Компонент макета является:

 <app-header></app-header>
<router-outlet></router-outlet>
<app-footer></app-footer>
</div>
  

Компонент заголовка:

  ngOnInit() {
    console.log(this.dataService.urlExists())
    if(this.dataService.urlExists()){
      this.url = true
     }else{
       this.url = false
     };

  }
<header class="stick-top forsticky" id="header" [ngClass]="{'gradient': url==true}">
</header>
  

Общий сервис:

 urlExists(){
     this.url = this.router.url
     if(this.url == "/"){
         return false;
     }else{
         return true;
     }
 }
  

Пожалуйста, обратите внимание: при обновлении страницы это работает..

Ответ №1:

Это потому, что ваш компонент заголовка не запускается повторно при навигации, поскольку он находится за пределами router-outlet . Вам необходимо прослушать изменения маршрута и соответствующим образом выполнить требуемые операции.

Таким образом, в компоненте заголовка вы можете подписаться на события маршрутизатора и прослушивать NavigationEnd события для проверки URL:

 import {NavigationEnd, Router} from '@angular/router';
import {filter} from 'rxjs/operators';
...



constructor(private router: Router) {
    this.subscribeRouterEvents();

}

subscribeRouterEvents = () => {
    this.router.events.pipe(
      filter(e => e instanceof NavigationEnd)
    ).subscribe(() => {
       console.log(this.dataService.urlExists())
       if(this.dataService.urlExists()){
          this.url = true
       }else{
          this.url = false
       };
    });
  

Комментарии:

1. Рад помочь 🙂