Vuejs + vue-apollo повторные запросы graphql не отображаются при просмотре - PullRequest
0 голосов
/ 15 февраля 2019

Я следую руководству YouTube по vuejs, использующему laravel в качестве сервера graphql и vue-apollo для внешнего интерфейса, и я застрял в одном моменте, который, как мне кажется, может сработать, у репетитора на видео естьта же проблема, но это не остановило его демо-версию, но для меня это так.

Демо-версия отображает список книг, книги разделены по категориям, есть также некоторые книги, помеченные (булевы) как "избранные"".

На первой странице загрузки показаны все книги (это работает нормально).

В верхней части страницы есть меню для отображения" книг по категориям "," все "книга и "избранные" книги.

"Книги по категориям" работают, возвращая только книги в выбранной категории.Но ссылка «все» и «избранные» книги возвращают «Ошибка типа: невозможно прочитать свойство« книги »с неопределенным значением».

Я удалил страницу и проверил ссылки «все» и «избранные», и ониделать работу, и когда у меня есть полная страница, данные возвращаются, я вижу это в консоли.

Я новичок в vuejs, так что это может быть что-то простое, но я просто не могу видеть это!

<template>
<div class="hello">
    <ApolloQuery :query="query">
    <template slot-scope="{ result: { data, loading }, isLoading }">
        <div v-if="isLoading">Loading...</div>
        <div v-else>
            <a href="#"  @click="selectCategory('all')"  class="link-margin">All</a>
            <a href="#"  @click.prevent="selectCategory('featured')"  class="link-margin">Featured</a>
            <a href="#" v-for="category of data.categories" :key="category.id" @click.prevent="selectCategory(category.id)"  class="link-margin">
        {{ category.name }}. {{ category.id }}
      </a>
        </div>
    </template>
</ApolloQuery>
<div v-if="selectedCategory === 'all'">
    debug all
    <ApolloQuery :query="query">
        <template slot-scope="{ result: { data, loading }, isLoading }">
            <div v-if="isLoading">Loading...</div>
            <div v-else>
                <div v-for="book1 of data.books" :key="book1.id">
                    <router-link :to="`/books/${book1.id}`"> {{ book1.id }} : {{ book1.title }} </router-link>
                    <div> {{ book1.author }}</div>
                    <img :src="book1.image" alt="cover image">
            </div>
                </div>
        </template>
    </ApolloQuery>
</div>

<div v-else-if="selectedCategory === 'featured'">
    debug featured
    <ApolloQuery :query="booksFeaturedQuery" :variables="{ featured: true }">
        <template slot-scope="{ result: { data, loading }, isLoading }">

            <div v-if="isLoading">Loading...</div>
            <div v-else>
                <div v-for="bookf of data.booksByFeatured" :key="bookf.id">
                    <router-link :to="`/books/${bookf.id}`"> {{ bookf.id }} : {{ bookf.title }} </router-link>
                    <div> {{ bookf.author }}</div>
                    <img :src="bookf.image" alt="cover image">
            </div>
                </div>
        </template>
    </ApolloQuery>
</div>
<div v-else>
    <ApolloQuery :query="query" :variables="{ id: selectedCategory }">
       debug not all
        <template slot-scope="{ result: { data, loading }, isLoading }">
            <div v-if="isLoading">Loading...</div>
            <div v-else>
                <div v-for="book of data.category.books" :key="book.id">
                    <router-link :to="`/books/${book.id}`"> {{ book.id }} : {{ book.title }} </router-link>
                    <div> {{ book.author }}</div>
                    <img :src="book.image" alt="cover image">
                </div>
            </div>
        </template>
    </ApolloQuery>
</div>
    </div>
</template>

<script>
import categoryQuery from '@/graphql/queries/Category.gql'
import categoriesQuery from '@/graphql/queries/Categories.gql'
import booksQuery from '@/graphql/queries/Books.gql'
import booksFeaturedQuery from '@/graphql/queries/BooksFeatured.gql'

export default {
    name: 'app',
    components: {
},
data() {
    return {
        selectedCategory: 'all',
        query: booksQuery,
        categoryQuery,
        categoriesQuery,
        booksQuery,
        booksFeaturedQuery
    }
},
methods: {
    selectCategory(category) {
        if (category === 'all') {
            this.query = booksQuery
        } else if (category === 'featured') {
            this.query = booksFeaturedQuery
        } else {
            this.query = categoryQuery
        }
        this.selectedCategory = category
    }
}
}
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...