PROGBLOG Developers Blog

空想家 Developers Blog

稼ぐ力? とにかくスキルが欲しい。

Nuxt.js と Firebase で作成したログインシステムにローディング画面を付け足してみる

前提

Nuxt.jsFirebase でログインシステムを構築しておく。

上記ログインシステムの構築方法は別記事にて記載している。

上記システムの仕組み

まずは大枠 index.vueコンポーネント(ログイン前) Hello.vue を表示する。

Hello.vue に組み込まれたGoogleログイン ボタンをクリック後、Googleログイン認証画面に飛び、ログイン完了できる。

その後しばらく経つと、index.vueコンポーネントGoodbye.vue に変更される。

ローディングページが欲しい

作成したシステムだとログイン判断中に、Hello.vue が表示されてしまう。

つまりユーザーがログイン後、しばらくの間もログイン前の画面が表示されている。

それを何とか解消するためにローディングページを導入する。

コード

<template>
<div id="app">
  <div v-if="!loading">ログイン中...</div>
  <Hello v-if="!isLogin && loading"></Hello>
  <Goodbye v-if="isLogin && loading" :user="userDate"></Goodbye>
</div>
</template>

<script>
import firebase from "~/plugins/firebase.js";
export default {
  data() {
    return {
      loading: false,
      isLogin: false,
      userDate: null
    };
  },
  created() {
    firebase.auth().onAuthStateChanged(user => {
    if (user) {
        this.isLogin = true;
        this.userDate = user;
      } else {
        this.isLogin =false;
        this.userDate = null;
      }
      this.loading=true;
    });
  },
};
</script>

<style>
</style>

考え方

<div v-if="!loading">ログイン中...</div>

まずはローディング中に表示させる要素を作成し、v-if を使用し条件で出し入れを可能にする。

続いて条件を指定する。

初期値はfalsefirebase.auth().onAuthStateChanged の処理を実行中のみtrue(表示) に変更する。

  <Hello v-if="!isLogin && loading"></Hello>
  <Goodbye v-if="isLogin && loading" :user="userDate"></Goodbye>

同時に、上記2つのコンポ―ネントにはloading を付与することで、常にtrue(表示) する。