посты не загружаются после addind наAuthStateChanged - PullRequest
0 голосов
/ 26 июня 2019

Я недавно добавил функцию onAuthStateChanged в конструктор, и если пользователь не равен нулю, тогда я вызываю функцию для получения сообщений (событий).Но данные функции не загружаются, пока я не щелкну где-нибудь на странице, а затем данные отображаются.Ошибки не отображаются.

Я попытался очистить onAuthStateChanged, и данные загрузились в порядке, но мне нужно добавить защиту firebase на этой странице.

Вот мои feed.ts ифункция getEvents ()

public async getEvents() {
    this.events = [];
    const loading = await this.loadingCtrl.create({
      message: 'Loading events...'
    });

    loading.present();
    const query = firebase.firestore().collection('events').orderBy('created', 'desc').limit(this.pageSize);

    query.onSnapshot((snapshot) => {
      const changedDocs = snapshot.docChanges();

      changedDocs.forEach((change) => {
        if (change.type == 'modified') {
          for (let i = 0; i < this.events.length; i++) {
            if (this.events[i].id === change.doc.id) {
              this.events[i] = change.doc;
            }
          }
        }
      })
    })

    query.get().then((events) => {
      events.forEach((event) => {
        this.events.push(event);
      });

      loading.dismiss();
      if (events.size == 0) {
        this.cursor = 0;
      } else {
        this.cursor = this.events[this.events.length - 1]; // the last index of the collection
      }
      console.log(this.events);
    }).catch((err) => {
      console.log(err);
    });
  }

Вот конструкция, где я вызываю функцию getEvents ().Сообщение о загрузке отображается, когда я открываю приложение, но данные не отображаются, пока я не щелкну где-нибудь в приложении.

constructor(public navCtrl: NavController, private loadingCtrl: LoadingController, private toastCtrl: ToastController, private http: HttpClient, public actionSheetCtrl: ActionSheetController, public alertCtrl: AlertController, public modalCtrl: ModalController, public popoverCtrl: PopoverController, private location: Location, ) {

    firebase.auth().onAuthStateChanged((user) => {
      if (user) {
        this.getEvents();
      } else {
        this.location.replaceState('/');
        this.navCtrl.navigateForward('login');
      }
    });
    // this.getEvents();
  }

Функция работает нормально, если я вызываю ее вне условия if (user) {...

1 Ответ

0 голосов
/ 27 июня 2019

Я думаю, вы можете просто проверить currentuser :

constructor(public navCtrl: NavController, private loadingCtrl: LoadingController, private toastCtrl: ToastController, private http: HttpClient, public actionSheetCtrl: ActionSheetController, public alertCtrl: AlertController, public modalCtrl: ModalController, public popoverCtrl: PopoverController, private location: Location, ) {
      if (firebase.auth().currentUser != null) {
        this.getEvents();
      }
}

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

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