Vue использует v-for для перебора вложенного массива ответов API

#javascript #vue.js #vue-component #vuejs3 #vue-composition-api

#javascript #vue.js #vue-компонент #vuejs3 #vue-composition-api

Вопрос:

Я начинаю изучать vue, я пытался немного попрактиковаться, и я застрял с циклами for.

Я вызываю api, который я разработал, чтобы лучше понимать обработку данных. Результатом вызова является:

 [
    {
        "_id": "ID1",
        "customerID": "ASDF",
        "purchases": [
            {
                "laptop": "DELL",
                "price": "500"
            },
            {
                "monitor": "DELL",
                "price": "200"
            }
        ]
    },
    {
        "_id": "ID2",
        "customerID": "FDSA",
        "purchases": [
            {
                "laptop": "MacBook",
                "price": "1800"
            },
            {
                "monitor": "DELL",
                "price": "300"
            }
        ]
    }
]
  

Моя цель — использовать v-for для просмотра массива покупок, чтобы он мог отображать содержимое массива для каждой записи в json.

Шаблон vue, который я использую, является:

 <template>
  <div>
    <div class="card" v-for="data in purchases" :key="data.purchases">
        <div class="card-image">
          <div class="card-content">
            <div class="media">
              <div class="media-content">
                <p class="title is-4">PURCHASES</p>
                <div
                  class="columns is-variable is-1-mobile is-0-tablet is-3-desktop is-8-widescreen is-2-fullhd"
                >
                  <div class="column">Laptop: {{data.purchases[0].laptop}}</div>
                  <div class="column">Monitor: {{data.purchases[0].monitor}}</div>
                </div>
              </div>
            </div>
          </div>
        </div>
    </div>
  </div>
</template>
  

Скрипт в файле vue:

 <script>
import { ref } from "@vue/composition-api";

export default {
  setup() {
    const purchases = ref([]);
    const API_url = "http://localhost:8383/purchases";

    async function getData() {
      const reponse = await fetch(API_url);
      const json = await reponse.json();
      purchases.value = json;
      console.log(purchases);
    }

    getData();

    return {
      purchases,
    };
  },
};
</script>
  

Я знаю, что показываю только первый элемент массива, и это именно мой вопрос, как я могу просмотреть весь массив с помощью v-for.

Я был бы очень признателен за помощь 🙂

Ответ №1:

Создайте другой вложенный, v-for чтобы выполнить цикл data.purchases :

 <template>
  <div>
    <div class="card" v-for="data in purchases" :key="data.purchases">
        <div class="card-image">
          <div class="card-content">
            <div class="media">
              <div class="media-content">
                <p class="title is-4">PURCHASES</p>
                <div
                  class="columns is-variable is-1-mobile is-0-tablet is-3-desktop is-8-widescreen is-2-fullhd"
                >
                <template v-for="purchase  in data.purchases">
                  <div class="column">Laptop: {{purchase.laptop}}</div>
                  <div class="column">Monitor: {{purchase.monitor}}</div>
               </template>
                </div>
              </div>
            </div>
          </div>
        </div>
    </div>
  </div>
</template>