Angular 8 не изменять заголовок после навигации - PullRequest
0 голосов
/ 15 марта 2020

Я хочу изменить заголовок, когда пользователь вошел в систему, но я не могу. Перенаправление работает хорошо, и центр страницы меняется, но заголовок - нет.

Эта функция используется при нажатии кнопки «Вход» в компоненте аутентификации

 LoginFormSubmit(LoginForm){
return this.http.post(environment.laravel_api+'/login',LoginForm.value).subscribe(
  data => this.afterLogin(data) ,
  error => console.log(error)
);

}

afterLogin (данные) {

this.user.setSession(data['user']);
this.route.navigateByUrl('');

}

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

 session;
  constructor(private  user: UserService, private http: HttpClient, private route: Router) {

  }

  ngOnInit(): void {
    console.log("Dentro");
    this.session = this.user.getSession();
  }


  Logout(){
    localStorage.clear();
    this.afterLogout();
  }

  afterLogout(){
    this.route.initialNavigation();
  }

А вот пользовательская служба:

 constructor() { }



  setSession(session_data){
    localStorage.setItem('session', JSON.stringify(session_data));

  }

  getSession(){
    return JSON.parse(localStorage.getItem('session'));

  }

1 Ответ

1 голос
/ 15 марта 2020

Вы должны реализовать что-то подобное в своей пользовательской службе:

@Injectable()
class UserService() {

    private _session= new BehaviorSubject<any>({});

    setSession(session_data: string) {
        this._session.next(session_data);
    }

    get session() {
        return this._session.asObservable();
    }
}

Затем в HeaderComponent:

<button>{{ (userService.session | async).firstName }}</button>

Объяснение: предпочитайте не использовать localStorage для удержания сеанс, так как это может привести к тому, что приложение Angular не будет синхронизировано c с бэкэндом (по истечении сеанса). Предпочитают отправлять повар ie из серверной части и позволяют приложению Angular получать информацию о пользователе при каждом запуске или обновлении приложения.

Служба Angular является одноэлементной (один экземпляр для всего приложение), поэтому он может хранить состояние и делиться им с любым компонентом. BehaviorSubject помогает уведомлять подписчиков об изменении состояния входа в систему.

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