我有一个小的Vue / Vuetify应用程序,我遇到了问题 - 特别是当我从我的API中获取数据时,在左导航中获取Vuetify列表组件以正确呈现 .
该列表正确呈现列表项,但我试图从服务器获取一些数据作为这些项的子项,并且这些子项没有显示 . 我有一个加载器,应该在Vuex获取数据时出现,看起来它正常工作 . 但是当应用程序加载时,左侧导航列表不会显示应该使用的子项 .
App.vue:
<template>
<div>
<div v-if="loading === true">
<p>loading...</p>
</div>
<v-app v-if="loading === false">
<v-navigation-drawer
persistent
:mini-variant="miniVariant"
:clipped="clipped"
v-model="drawer"
enable-resize-watcher
fixed
app
>
<v-list>
<v-list-group
v-for="item in menuItems"
:key="item.title"
>
<v-list-tile color="blue" slot="activator" :to="item.url">
<v-list-tile-action>
<v-icon color="blue" v-html="item.icon"></v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title>{{ item.title }}</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
<v-list-tile v-for="subItem in item.subItems" :key="subItem.title">
<v-list-tile-content>
<v-list-tile-title>
{{ subItem.title }}
</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list-group>
</v-list>
</v-navigation-drawer>
<v-content>
<router-view/>
</v-content>
<v-footer :fixed="fixed" app>
<span> © 2018</span>
</v-footer>
</v-app>
</div>
</template>
<script>
import axios from 'axios';
import { eventBus } from '@/main.js';
export default {
name: 'App',
data () {
return {
loading: true,
clipped: false,
drawer: true,
fixed: false,
// subItems are currently hard-coded
menuItems: [
{ id: 'flash-cards', icon: 'bubble_chart', title: 'Flash Cards', url: '/', subItems:
// [{title: 'one'}, {title: 'two'}]
this.myLessonTitles
},
{ id: 'lessons', icon: 'playlist_add', title: 'Create Lesson', url: '/new-lesson', subItems: []}
],
miniVariant: false,
right: true,
rightDrawer: false,
title: 'Flash Cards'
}
},
computed: {
myLessonTitles: function () {
return this.$store.getters.lessonTitles
}
},
created () {
this.$store.dispatch('GRAB_LESSON_DATA').then(() => {
this.loading = false;
});
},
}
</script>
Vuex store.js:
import Vue from 'vue';
import Vuex from 'vuex';
import axios from 'axios';
Vue.use(Vuex);
const store = new Vuex.Store({
state: {
lessons: [],
apiURL: 'https://my-api.com'
},
actions: {
GRAB_LESSON_DATA: function ({commit}) {
return new Promise( (resolve, reject) => {
setTimeout( () => {
axios.get(this.state.apiURL + '/lessons').then( (res) => {
commit('SET_LESSON_DATA', {list: res.data.lessons});
resolve();
// console.log(JSON.stringify(res.data.lessons));
}, (err) => {
console.log(err);
})
}, 2000)
});
}
},
mutations: {
SET_LESSON_DATA: (state, {list}) => {
state.lessons = list
}
},
getters: {
lessonTitles: state => {
let titles = [];
state.lessons.forEach( (lesson) => {
titles.push({"title": lesson.title});
})
return titles;
}
},
modules: {
}
})
export default store;
我知道getter函数正在返回正确的数据,但是Vuetify列表没有正确呈现 . 如果我硬编码列表项,它工作正常 .
有任何想法吗?