質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

594閲覧

null判定が実装できない

tamaharu31

総合スコア4

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/06/09 12:25

現在、google bools apiを用いた本の検索と気になる(保管)機能の実装したサイトを制作しております。

現状できていること)
・検索を押して本を表示させること
・気になるボタンを押して、firebaseにidとtitleを保管すること
・気になるボタンのクリックイベントで画面上にはapi内のタイトルを気になるリストに表示する。firebaseにはapi内のタイトル・idデータを保管する
・削除ボタンを押して、api内のタイトルをリストから削除し、firebaseからはtitleとidを削除する

問題点)
・リスト中最後の一行がnullなり、画面から消えずnull判定を実装したいができない

上記の問題点において、下記(Javascript //null判定部分)のように書いているのですがうまく実行されません。
アドバイスを頂けると助かります。
よろしくお願いいたします。

HTHL

1<!DOCTYPE html> 2<html lang="en"> 3 <head> 4 <meta charset="utf-8" > 5 <title>My Favorite Books</title> 6 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css"> 7 <link rel="stylesheet" href="main.css"> 8 <meta name="viewport" content="width=device-width,initial-scale=1.0"> 9 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> 10 </head> 11 <body> 12 <header> 13 </header> 14 <div class="container" id="app"> 15 <h3 class="text-center">My Favorite Books</h3> 16 <form v-on:submit.prevent="getResult(query)"> 17 <div id="input" class="input-group mx-auto col-lg-6 col-md-8 col-sm-12"> 18 <input id="search-box" type="text" class="form-control" placeholder="検索文字を入力" v-model="query"> 19 <button id="search" class="btn btn-primary" onclick="">検索</button> 20 </div> 21 <div class="hamburger-menu" id="favoshelf"> 22 <input type="checkbox" id="menu-btn-check"> 23 <label for="menu-btn-check" class="menu-btn"><span></span></label> 24 <div class="menu-content"> 25 <ul> 26 <li> 27  <p>気になるリスト</p> 28 </li> 29 <li v-for="booksFav in booksFavs"> 30  {{booksFav.title}} 31  <button v-on:click="removeFavorite(booksFav.id)" class="btn btn-light">削除</button> 32 </li> 33 </ul> 34 </div> 35   </div> 36 <div class="book_wrapper"> 37 <div class="book_card" v-for="item in items"> 38 <div class="row no-gutters"> 39 <div class="col-md-4"> 40 <img class="card-img" v-bind:src="item.volumeInfo.imageLinks?.thumbnail" /> 41 </div> 42    43 <div class="col-md-8"> 44 <div class="card-body"> 45 <h5 class="card-title">{{item.volumeInfo.title}}</h5> 46 <p class="card-text">{{item.volumeInfo.authors}}</p> 47 <p class="card-text"><small class="text-muted">{{item.volumeInfo.publisher}}</small></p> 48 </div> 49 <div class="book_button"> 50 <a v-bind:href="item.volumeInfo.previewLink" class="waves-effect waves-light btn" target="_blank">show detail</a> 51 </div> 52 <button v-on:click="addFavorite(item.id,item.volumeInfo.title)" class="btn btn-light">気になる</button> 53 </div> 54 </div> 55 </div> 56 </div> 57 </div>

Javascript

1/* jshint curly:true, debug:true */ 2/* globals $, firebase */ 3 4const vm = new Vue({ 5 el: '#app', 6 data() { 7 return{ 8 query:'', 9 items:[], //#apiから取得したデータを格納 10 booksFavs:[] 11 }; 12 }, 13 methods:{ 14 getResult(query){ 15 axios.get("https://www.googleapis.com/books/v1/volumes?q=search" + query).then(response => { 16 console.log(response.data); 17 this.items = response.data.items; 18 const bookDate =response.data?.items?.volumeInfo?.imageLinks?.thumbnail; 19 if(typeof bookDate == "undefined") { 20 console.log("未定義です。"); 21 } 22 firebase.database().ref('my-key/').on('value', snapshot => { 23 if (snapshot) { 24 const bookList = snapshot.val(); 25 let booksFavs = []; 26 // snapshotで最新状態を取得する 27 console.log(snapshot.val()); 28 //null判定 29 const fovdata = snapshot.val(); 30 if (fovdata === null) { 31 return bookList=''; 32 } 33 // データオブジェクトを配列に変更する 34 Object.keys(bookList).forEach((val, key) => { 35 bookList[val].id = val; 36 booksFavs.push(bookList[val]); 37 }); 38 this.booksFavs = booksFavs; 39 } 40 }); 41 }); 42 }, 43 addFavorite(setId,setTitle) { 44 //気になるボタンの本のIDとtitleを取得する 45 let setDatas = { 46 id : setId, 47 title : setTitle 48 }; 49 //IDとtitleをfirebaseに登録する 50 firebase 51 .database() 52 .ref(`my-key/${setId}`) 53 .set(setDatas); 54 }, 55 //IDとtitleを削除する 56 removeFavorite(removeId) { 57 let removeDatas = { 58 id : removeId, 59 }; 60 console.log(removeDatas); 61 firebase 62 .database() 63 .ref(`my-key/${removeId}`) 64 .remove(); 65 } 66 } 67});

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yh1224

2021/06/09 23:23 編集

// snapshotで最新状態を取得する console.log(snapshot.val()); のところ、どう表示されますか?
tamaharu31

2021/06/10 02:18

デベロッパーツールでは、気になるリストに何も状態のときはnullと表示され リストに追加した際は、apiのid・title情報が表示されます。
itagagaki

2021/06/16 16:49

> デベロッパーツールでは、気になるリストに何も状態のときはnullと表示され そのとき if (fovdata === null) { の中には入らないのですか? const bookList = snapshot.val(); console.log(bookList); console.log(typeof bookList); // よくわからないので、これも確認してみたい if (bookList === null) { console.log('bookList is null !!'); のようにして確かめてみましたか? あと、fovdata は bookList と同じですよね。fovdata は要らないのでは?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問