iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
2
Modern Web

Vue CLI + Firebase 雲端資料庫 30天打造簡易部落格及後臺管理系列 第 13

Day 13: 功能復用小幫手,還不錯的 Mixin 混入

這是最近和團員偷學到的招。

先來看看官網混入的文件,有分上下兩段,上段是基礎 + 選項合併,下段是全局混入,最後一個 "自定义选项合并策略" 說實在的我看得有點複雜,也沒用過所以不知道哈哈。

局部混入其實我覺得和另外寫一個小組件有點像,寫小組件是要註冊進 components 選項裡面,而局部混入是丟到 mixin 選項裡面,不過局部混入會自動進行選項合併。我個人目前是還沒有用過局部混入,倒是全局混入看似比較好用的樣子,在這個專案中,目前是把 showUser 方法給做了個全局混入,這樣在各個頁面都方便查看使用者資訊。

我們原本是寫在這裡:

App.vue 內

methods: {
  showLoginClick () {
    this.loginClick++
    if (this.loginClick > 2) {
      this.loginShow = true
      setTimeout(() => {
        this.loginClick = 0
        this.loginShow = false
      }, 3000)
    }
  },

	// 此方法用來測試現在使用者,綁定在首頁大圖 p 元素上
	showUser () {
    var user = firebase.auth().currentUser
    var name, email, photoUrl, uid, emailVerified

    if (user != null) {
      name = user.displayName
      email = user.email
      photoUrl = user.photoURL
      emailVerified = user.emailVerified
      uid = user.uid
      console.log({
        name,
        email,
        photoUrl,
        emailVerified,
        uid
      })
    } else {
      console.log('使用者以登出', user)
    }
  }
}

現在不要了,把 showUser 剪下,現在可以新增一個資料夾 functions 用來管理我們外部的函式

https://ithelp.ithome.com.tw/upload/images/20200921/20129819POD6pF9AVb.png

現在 showUser.vue 的內容為:

<template>
  <span></span>
</template>

<script>
import { firebase } from '../Model/FirebaseModel.js'
export default {
  name: 'globalFunctionShowUser',
  created () {
  },
  methods: {
    showUser () {
      var user = firebase.auth().currentUser
      var name, email, photoUrl, uid, emailVerified

      if (user != null) {
        name = user.displayName
        email = user.email
        photoUrl = user.photoURL
        emailVerified = user.emailVerified
        uid = user.uid
        console.log({
          name,
          email,
          photoUrl,
          emailVerified,
          uid
        })
		// 多個 return 之後要另外操作返回值的話也方便,事實上任何的函式都應該要有 return,才符合輸入輸出概念,也方便單元測試。
        return {
          name,
          email,
          photoUrl,
          emailVerified,
          uid
        }
      } else {
        console.log('使用者以登出', user)
      }
    }
  }
}
</script>

定義好內容後,現在我們可以對這個組件檔做全局混入,我們在 main.js 也就是進入點的地方進行混入:

import Vue from 'vue'
import App from './App.vue'
import { router } from './router'
import store from './store'

import { BootstrapVue } from 'bootstrap-vue'
import 'bootstrap/dist/css/bootstrap.css'
import 'bootstrap-vue/dist/bootstrap-vue.css'
// 引入剛剛的組件檔
import showUser from './functions/showUser.vue'

Vue.use(BootstrapVue)
Vue.config.productionTip = false

// 全局混入
Vue.mixin(showUser)

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

這樣你在其他的 .vue 檔,就可以像下面這樣對此組件進行呼叫,就像使用函式或方法一樣 ...

this.showUser()

今天就這樣,懂了方法後,後面我們或許可以再把 Firebase 的常用方法做個混入,如此就不必在各個頁面進行 import 了。


沒事也可以逛逛我們其他團隊成員的文章啦 ~~
eien_zheng: 前端小嘍嘍的Golang學習旅程_The journey of learning Golang 系列
PollyPO技術: 前端設計轉前端工程師-JS踩坑雜記 30 天 系列
阿電: 忍住不打牌位,只要30天VueJS帶你上A牌 系列
喬依司: 實作經典 JavaScript 30 系列


上一篇
Day 12: Firebase 雲端資料庫 - 隨便亂亂用 (Cloud Firestore)
下一篇
Day 14: 借個別人的套件,給自己文章編輯 Markdown 一下
系列文
Vue CLI + Firebase 雲端資料庫 30天打造簡易部落格及後臺管理30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言