BehaviorSubject返回初始值,尽管在Angular中已更改

时间:2020-06-23 12:32:31

标签: angular typescript observable angular8 behaviorsubject

登录时,我正在对服务器进行邮寄并获取了一些数据。我想将该数据保存到我的BehaviorSubject。尽管它已更新,但是当我订阅它以将其添加到另一个组件时,我正在获取它的初始值。

login.service.ts:

@Injectable({
  providedIn: 'root'
})
export class LoginService {

  private data = new BehaviorSubject('default');
  public cData = this.data.asObservable();

constructor(private router: Router, private httpClient: HttpClient) { }

  public login(userName: string, password: string): Observable<any> {
    const options: any = {
      headers: new HttpHeaders({
        'Content-Type': 'application/json',
      }),
    };
    return this.httpClient.post<any>(`/login`, { username: userName, password }, options)
      .pipe(
        tap((result: any) => {
          this.changeData(result.data);
          this.router.navigateByUrl('/main-page');
          return;
        }),
        catchError(error => {
          return of(error);
        })
      );
  }

public changeData(data: string): void {
    this.data.next(data);
}

login.component.ts

  public onSubmit(loginForm: NgForm): void {
    this.loginService.login(loginForm.value.username, loginForm.value.password).subscribe((result) => {
      this.loginService.cDataa.subscribe(data => {
        console.log(data); //I AM GETTING THE DATA
      });
    });
  }

main-page.component.ts

public ngOnInit(): void {
    this.loginService.cDataa.subscribe(data => {
            console.log(data); //I AM NOT GETTING THE DATA BUT I GET default
    });
  }

main-page.module.ts 中,我将LoginService插入了提供程序。

0 个答案:

没有答案