我是 VueJS 和 NuxtJS 的新手。我想设置以下路线:
https://example.com/resources/:sections/:categories
每当用户访问诸如 url 时https://example.com/resources/samsung/laptop
,我想向HTTP GET
REST API 发出请求以下载所有部分和类别并将其保存到“全局变量”中。每当用户点击<nuxt-link>
我网站上的任何内容时,NuxtJS 都不会再向 REST API 发出任何 HTTP GET 请求,除非我明确清空了“全局变量”。我从一些资料中了解到,我可以通过使用fetch()
函数来填充vuex store
.
因此,我制作了以下两个文件:
~/pages/resources/_.vue
<template>
<div>
<nuxt-link to="/resources/samsung/laptop">Samsung Laptop</nuxt-link>
<nuxt-link to="/resources/samsung/mouse">Samsung Mouse</nuxt-link>
<nuxt-link to="/resources/samsung/computer">Samsung Computer</nuxt-link>
<nuxt-link to="/resources/motorola/computer">Motorola Computer</nuxt-link>
<nuxt-link to="/resources/motorola/laptop">Motorola Laptop</nuxt-link>
<nuxt-link to="/resources/motorola/phone">Motorola Phone</nuxt-link>
</div>
</template>
<script>
export default {
middleware: 'auth',
async fetch({ $axios, $auth }) {
console.log('resource store', this.resources);
const sections = await $axios.get('/sections')
const categories = await $axios.get('/categories')
const resources = await $axios.get(`/resources/${$auth.user.id}/list`)
this.resources = {
sections: sections.data.data,
categories: categories.data.data,
resources: resources.data,
user: $auth.user,
}
},
computed: {
resources: {
get(){
return this.$store.state.resources
},
set(val){
this.$store.dispatch('setResources',val)
}
},
},
}
</script>
~/store/resources.js
export const state=()=>({
resources:{}
})
export const mutations ={
SET_RESOURCES(state,payload){
state.resources=payload
}
}
export const actions ={
setResources(context,payload){
context.commit('SET_RESOURCES',payload)
}
}
这个“几乎”做了我想要的。
当我第一次访问该 url
https://example.com/resources/samsung/laptop
时,我的开发人员工具会显示resource store undefined
,然后我看到我的浏览器成功地获取了数据。这是我所期望的。当我点击 时
<nuxt-link to="/resources/motorola/computer" />
,我又看到resource store undefined
了。这不是我所期望的。资源存储应已从步骤 1 填充。当我点击时
<nuxt-link to="/resources/motorola/phone" />
,我看到了resource store {Object > sections: etc...
。这就是我所期望的。但是为什么它在第 3 步而不是更早的时候填充呢?
我的问题是为什么资源存储在我第二次nuxt-link
点击时是空的?nuxt-link
我希望在第 1 步单击后立即填充资源存储 。
我究竟做错了什么?