KAEDE Hack blog

JavaScript 中心に ライブラリなどの使い方を解説する技術ブログ。

Nuxt Axios Firebase Realtime DB の値を一覧表示して input から追加して、追加後の一覧表示を出す

why

手軽で無料な Firebase を使ってなんかの管理システムを動くように作って

それで私が作れる機能を全て盛り込んだ 入力システムを見せられる形で作りたい

参考

Nuxt.js Vue.js 超入門

Chapter 6, 396ページ

what to do

kei-s-lifehack.hatenablog.com

前回の記事で Firebase RDB からの Nuxt Axios でのデータの取得はできた

今回はデータの追加をやる

axios.put で firebase の projectName.firebaseio.com/tableName

に送ることで登録できるらしい。まずはその検証をする

Firebase のデータの一覧表示、追加をやってみる


v-for で Firebase のデータをリスト表示する

    getData() {
      axios.get(url + '.json')
        .then( (res) => {
          this.json_data = res.data
        }).catch((error) => {
          this.message = 'ERR'
          this.json_data = {}
      })
    },

まずはこの getData() で this.json_data に Firebase のデータを入れる

  created() {
    this.getData()
  },

そして created で最初に計算がされる時呼び出す

    <li v-for="(data, key) in json_data" :key="key">
       {{key}} {{data}} 
    </li>

template で v-for を使い、展開する元のさっき入れた json_data

から key を指定した上で 展開する

f:id:kei_s_lifehack:20210829010917p:plain

この構造の場合は データの id? となる ai@sato や miku@hatune が

data_json の key プロパティとして自動で入る。

そして data にはさっき axios で response.data から取ってきた中身が入ってる

f:id:kei_s_lifehack:20210829014243p:plain

表示はこうなる


データを追加する機能を試す

methods: / addData()

    addData() {
      const add_url = url + this.email + '.json'
      const data = {
        'name': this.name,
        'tel': this.tel,
      }
      axios.put(add_url, data)
        .then( ( res ) => {
          this.email = ''

          this.name = ''
          this.tel = ''

          this.getData()
        })
    },

データを追加するには firebase のテーブル名の url と、

追加する id となるもの、今回は email の変数、

そして最後の .json の文字列が必要になる

それらを組み合わせた url + this.email + '.json' を

axios.put の第一引数として取り

第二引数には v-model で input に入れた値が入っている name と tel が

object として data にまとめられて、使われる。

送信後、.then で 送るものの id 相当の email, 中身の name, tel, が初期化される

そして getData() で更新後の値をとってくることになる。

template

    <input v-model="email" />
    <br/>
    <input v-model="name" />
    <br/>
    <input v-model="tel" />
    <br/>
    <button @click="addData"> ADD DATA </button>
    <br/>

email, name, tel, の input への入力と 追加ボタンへの関数のセットはこうする。

Chrome の画面

f:id:kei_s_lifehack:20210829020942p:plain

こうして新規に追加をすると

f:id:kei_s_lifehack:20210829021230p:plain

Firebase の DB に新しい値が送信され

入力欄に結びついている値がクリアされ

値が増えた Firebase の DB から再度データを持ってくることで画面が更新され、

3 つ目も含むデータが表示される。

上書きをしてみる

編集、update まわりの firebase axios の情報を調べると、

その関数はなく

stackoverflow.com

update したい id のデータを上書きすればいいらしい。

なのでやってみる

f:id:kei_s_lifehack:20210829144016p:plain

この状態のデータに miku@hatune と同じ id (email) で追加してみる

f:id:kei_s_lifehack:20210829144223p:plain

すると、miku@hatune のデータが書き換わった。

f:id:kei_s_lifehack:20210829144539p:plain

firebase の管理画面を見ても書き換わっている。

これで編集のロジックをどう作るかも見当がついた

まとめ

Firebase Realtime DB で追加処理まわりを書くには

まず get で全部撮ってくる処理を書いて

created で呼び出して json のデータを vue の変数でとって

v-for で一覧表示して

データを追加する method を作って、終わった後 get も呼び出すようにして

そして input に v-model つけて変数に持ってこれるようにして、

btn に データを追加する method を結びつける。

これで input の値を Firebase Realtime DB に追加して

今 Vue で持ってる追加用の変数を空にして

画面を更新して、追加したものも含めて表示できる

次回

次回の記事では一覧をリンク化して、モーダルを立ち上げて編集できるようにしたい。

とりあえず詳細をカードで立ち上げるところから?