[Vue.js] GoogleBookApi를 local Storage에 저장합니다.

18540 단어 Vue.jsJavaScript
개요
【 Vue.js】Vue.js를 통해 GoogleBookAPI를 가져옵니다.에 쓴 데이터를locallstorage에 저장합니다.
나중에 Vue CLI로 애플리케이션을 만들려고 합니다.
공식 참조의 정보에 따라 제작되었습니다.
case
【 Vue.js】Vue.js를 통해 GoogleBookAPI를 가져옵니다. 최종적으로 검색 Results의 배열로 json 데이터를 얻었다.
  • 확보한 데이터
  • title
  • image
  • description
  • 가져온 데이터를 local Storage에 저장합니다.
    먼저 공식 참조복잡한 가격으로를 확인하세요.

  • 삭제:Remove 단추를 눌렀을 때removeCat(n) 함수를 실행합니다.n은 배열 번호
  • 입니다.
    <div id="app">
      <h2>Cats</h2>
      <div v-for="(cat, n) in cats">
        <p>
    
          <span class="cat">{{ cat }}</span>
           <!-- 削除:Removeボタンを押すとremoveCat(n)関数が実行される。nは配列番号 -->
          <button @click="removeCat(n)">Remove</button>
        </p>
      </div>
    
      <p>
    
        <input v-model="newCat">
        <!-- 取得:Add CatボタンでaddCat関数を実行 -->
        <button @click="addCat">Add Cat</button>
      </p>
    
    </div>
    
    const app = new Vue({
      el: '#app',
      data: {
        cats: [],//取得したデータの格納先
        newCat: null //入力データの格納先
      },
      mounted() { //vueインスタンスがマウントした後に実行
        if (localStorage.getItem('cats')) { //ストレジのkeyを検索
          try { //json -> stringに変換
            this.cats = JSON.parse(localStorage.getItem('cats'));
          } catch(e) { //データに問題があった場合に削除
            localStorage.removeItem('cats');
          }
        }
      },
      methods: {
        addCat() {
          // 実際に何かしたことを入力する
          if (!this.newCat) {
            return;
          }
    
          this.cats.push(this.newCat);//入力データを配列に追加
          this.newCat = ''; //入力欄を空に
          this.saveCats(); //ストレジに保存
        },
        removeCat(x) { //削除
          this.cats.splice(x, 1); //引数xから受け取った配列番号から1つ削除
          this.saveCats(); //ストレジに保存
        },
        saveCats() { //保存
          const parsed = JSON.stringify(this.cats); //string -> json変換
          localStorage.setItem('cats', parsed); //cats配列へ保存
        }
      }
    })
    
    상당히 간단하고 알기 쉽다.
    이거 좀 수정해서 할게요.
    완성물
  • 이번에는 저장에만 초점을 맞추기 때문에 삭제, 일람, 편집은 포함되지 않습니다.
  • 다음 요소를 삭제한 것이다.
    * removeCat(x)
    * mounted()
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
      </head>
      <body>
        <div id="app">
          <input type="text" v-model="keyword" />
          <button @click="Saerch(keyword)">検索</button>
          <div>
            <ul>
                <li v-for="(book, index) in saerchResults" :key="index">
                    {{ book.title }}
                    <!-- bookオブジェクトを渡している。 -->
                    <button @click="addBook(book)">追加</button>
                </li>
            </ul>
    
          </div>
    
        </div>
        <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
        <script>
          let app = new Vue({
            el: "#app",
            data() {
              return {
                keyword: "",
                saerchResults: [], //検索結果の一覧
                books:[] //追加したデータの格納先
              };
            },
            methods: {
              //クエリストリングの作成
              async Saerch(keyword) {
                //初期化
                this.saerchResults = [];
                const baseUrl = "https://www.googleapis.com/books/v1/volumes?";
                const params = {
                  q: `intitle:${keyword}`,
                  maxResults: 40,
                };
                const queryParams = new URLSearchParams(params);
                console.log(baseUrl + queryParams);
    
                //fetchでjson取得
                const response = await fetch(baseUrl + queryParams)
                  //responseをjsonに変換
                  .then((response) => response.json())
                  .then(console.log());
                for (let book of response.items) {
                  //jsonオブジェクトのtitle,imageLinks, descriptionまでアクセス
                  let title = book.volumeInfo.title;
                  let img = book.volumeInfo.imageLinks
                    ? book.volumeInfo.imageLinks
                    : "";
                  let description = book.volumeInfo.description;
                  //必要な情報をpush, title情報なければ空を追加
                  this.saerchResults.push({
                    title: title ? title : "",
                    image: img.thumbnail ? img.thumbnail : "",
                    //40文字以内
                    description: description ? description.slice(0, 40) : "",
                  });
                }
              },
              addBook(book) {
                this.books.push(book); //bookオブジェクトを受け取る。
                this.saveBooks();
              },
              saveBooks() {
                const parsed = JSON.stringify(this.books); //文字列 ->json
                localStorage.setItem('books', parsed); //第一引数:keyの名前,第二引数:value
              },
            },
          });
        </script>
      </body>
    </html>
    
    

    다음에는 vue CLI를 사용하여 CRUD를 만듭니다.

    좋은 웹페이지 즐겨찾기