Подписка на Angular не вызывается на Next

Я пытаюсь реализовать систему автоматического входа в систему, в которой я сохраняю данные входа в localStorage, чтобы при обновлении я извлекал данные из локального хранилища, когда я извлекаю данные из localstorage, я использую Subject для выдачи этих данных, чтобы в компоненте заголовка я подписывался на данные и поддерживать состояние приложения при обновлении

Теперь при обновлении моя функция автоматического входа получает вызов, но подписка не вызывается в компоненте заголовка

Код AuthService

    autoLogin(){
    const userdata: {
        email:string;
        id: string;
        _token:string;
        _tokenExpairDate:Date;
    }=JSON.parse(localStorage.getItem('userData'));
    if(!userdata){
      return;
    }
    console.log("Auto Login Call");
    
    const loadedData=new User
    (
      userdata.email,
      userdata.id,
      userdata._token,
      new Date
      (
        userdata._tokenExpairDate
      )
    );
    if(loadedData.token){
      console.log(loadedData);
      console.log("data Emmit");
      this.user.next(loadedData);
    }
    else{
      console.log("data Not Emmit");
    }
 }

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

ngOnInit(){
    this.userSub=this.auth.user.subscribe(user=>{
      console.log("Subscription Call");
      this.isLogin=!user? false:true;
    })
  }

person Taqi Arzoo    schedule 04.05.2021    source источник
comment
не могли бы вы также предоставить код, в котором вы регистрируете свой AuthService в модулях   -  person Andrei    schedule 04.05.2021
comment
@Injectable ({providedIn: 'root'}) экспортный класс AuthServiceService {   -  person Taqi Arzoo    schedule 04.05.2021
comment
вы тоже кладете это в providers раздел где-нибудь?   -  person Andrei    schedule 04.05.2021
comment
Теперь нет, но я пробую это также в app.modules   -  person Taqi Arzoo    schedule 04.05.2021
comment
console.log("Subscription Call"); выполняется?   -  person Andrei    schedule 04.05.2021
comment
Нет, это только вызов при начальной загрузке, а не при обновлении   -  person Taqi Arzoo    schedule 04.05.2021
comment
Является ли auth.user субъектом или субъектом поведения? Если это Тема, это может означать, что next запускается перед подпиской, поэтому подписчик не видит его.   -  person Random    schedule 04.05.2021
comment
его субъект user = new Subject ‹User› ();   -  person Taqi Arzoo    schedule 04.05.2021


Ответы (1)


Не уверен, как вы на самом деле устанавливаете наблюдаемое, но это может вам помочь.

// In user.modal.ts export a interface for the user
// You need to define this so that you dont need to repeat your code

export interface User {
    email:string;
    id: string;
    _token:string;
    _tokenExpairDate:Date;
}
************************************
// In your service file, do this: 

import { User } from './user.modal.ts';

let initialUserDetails: User = {};

private userDetailsSource: BehaviorSubject<User> = new BehaviorSubject<User>(this.initialUserDetails);

public userDetailsObservable: Observable<User> = this.userDetailsSource.asObservable();

setUserDetails(userDetails: User) {
    this.userDetailsSource.next(userDetails);
}

getUserDetails(): Observable<User> {
    return this.userDetailsObservable;
}

********************************
// In your component.ts file, whenever you want to set the details: 

if (loadedData.token) {
    console.log(loadedData);
    console.log("data Emmit");
    this.user.next(loadedData); // Dont do this:

    this.yourServiceName.setUserDetails(loadedData); // Do this;
}


// Whenever you want to get the details of the Observable, you can do this: 

this.yourServiceName.getUserDetails().subscribe(subscribedData => {
    console.log('Latest Observable Data =>', subscribedData);
})

person Srikar Phani Kumar Marti    schedule 04.05.2021
comment
Обратите внимание, что, используя BehaviorSubject, когда вы подпишетесь на него, вы можете получить значение инициализации (здесь {}), а затем получить второе событие с реальными данными. Так что вы должны добавить чек в подписку. По этой причине мы часто используем null в качестве значения инициализации, поэтому его легко игнорировать. - person Random; 04.05.2021