Как получить или использовать данные из переменной, возвращаемой службой в angular 9? - PullRequest
0 голосов
/ 24 апреля 2020

Я пробовал много способов получить данные этой переменной, следует отметить, что я начинаю с Ioni c 5 и angular 9.

В моей ** аутентификации. Service. ts ** У меня есть следующее:

 export class AutenticationService {
  userData: any;
  constructor(
          public afStore: AngularFirestore,
          public fireAuth: AngularFireAuth,
          public router: Router,
          public ngZone: NgZone,
          private Navega: NavController
  ) {
      this.fireAuth.authState.subscribe(user => {
      if (user) {
        this.userData = user;
        localStorage.setItem('user', JSON.stringify(this.userData));
        JSON.parse(localStorage.getItem('user'));
      } else {
        localStorage.setItem('user', null);
        JSON.parse(localStorage.getItem('user'));
      }
    });
  }

  SignIn(values: any) {
    return new Promise<any>((resolve, reject) => {
      this.fireAuth.signInWithEmailAndPassword(values.email.toLowerCase(), values.password).then(
        res => {
          resolve (res);
        },
        err => reject(err));
    });
  }

В ** login.ts ** у меня есть следующее

    export class LoginPage implements OnInit {
      validationsForm: FormGroup;
      errorMessage = '';
      successMessage = '';
      valores: any;
      logo = '';
      constructor(
        public authSrv: AutenticationService,
        public router: Router,
        public loading: LoadingService,
        private menuCtrl: MenuController,
        public frmBuilder: FormBuilder,
        public alert: AlertasService,
        private navega: NavController
      ) { }
      ngOnInit() {}
      logIn(values: any) {
        this.loading.present('Iniciando...');
        this.authSrv.SignIn(values)
          .then((res) => {
            this.loading.dismiss();
            this.validationsForm.controls.password.setValue('');
            this.navega.navigateForward(['/dashboard']);
          }).catch((error) => {
            localStorage.removeItem('user');
            this.loading.dismiss();
            window.alert(error.message);
          });
      }

в ** dashboard.ts ** это проблема использования данных переменной userData: любая

export class DashboardPage implements OnInit {
Username: any;
  constructor(
        public authSrv: AutenticationService,
        private menuCtrl: MenuController,
        public Navega: NavController,
        public loading: LoadingService

  ) { }

  ngOnInit() {
    this.menuCtrl.enable(true);
    this.Username = this.authSrv.userData;
    console.log(this.authSrv.userData);
  }

** *console.log (this.authSrv.userData); ** печатает ** undefined **, но при просмотре в браузере я вижу, что в loclstorage, если данные там, в магазин. Я хочу получить ** displayName ** переменной ** Username **. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 24 апреля 2020

спасибо Джон Питерс , за подсказку по инъекционным препаратам Я решил проблему, заключающуюся в том, что моя служба запускается несколько раз на моих компонентах, поставив следующее: login.page.ts, register.page. ts, dashboard.page.ts constructor ( @Inject (AutenticationService) public authSrv) {}

и в отладке кажется, что он запускается только один раз. Вторая проблема все еще не решена , приборная панель приходит ко мне userData в console.log показывает мне следующее, и я хочу извлечь email и displayName.

введите описание изображения здесь

...