#vue.js #axios #nuxt.js #vuex
Вопрос:
export const state = () => ({
data: {}
})
export const getters = {
data: state => state.data
}
export const actions = {
getData ({ commit }) {
this.$axios('https://jsonplaceholder.typicode.com/todosx/1')
.then((response) => {
commit('SET_DATA', response.data)
})
.catch((err) => {
// Navigate to error page
})
}
}
export const mutations = {
SET_DATA (state, data) {
state.data = data
}
}
После обнаружения ошибки в улове для axios хотелось бы перейти на страницу ошибки из магазина Nuxt. Каков будет наилучший способ достичь этого?
Комментарии:
1.
this.$router.push('/404')
должен сделать трюк, так как он либо существует, либо будет использоватьerror
макет, так как он не может попасть на страницу.2. Кстати, вы могли бы сделать его более плавным в шаблоне и отобразить «здесь нет информации» вместо того, чтобы перемещать пользователя на 404, вы не думаете?
3. Спасибо за ответ. Я хотел бы показать здесь пользовательский шаблон ошибки. Итак, для этого можно отправить что-то вроде $nuxt.error({ Код состояния: 404, сообщение: «сообщение об ошибке»}) , как на страницах. Я попытался сделать то же самое в магазине и не смог понять, как это сделать.
Ответ №1:
В вашем catch
вы можете перенаправить пользователя на страницу с ошибкой,
return this.$nuxt.error({ statusCode: 404, message: 'Your error message' })
и на своей error.vue
странице вы можете получить к ней доступ с помощью опоры для ошибок, например:
<h1>{{ error.statusCode }}</h1>
<h2>{{ error.message }} </h2>
Комментарии:
1. Спасибо за ответ. Он работает на странице, но внутри магазина vuex он выдает мне еще одну ошибку TypeError: Не удается прочитать свойства undefined (чтение «ошибка») . При печати этого файла.$nuxt он отображается неопределенным . Есть ли какой-нибудь способ получить доступ к этому файлу.$nuxt в магазине vuex?
Ответ №2:
Такой шаблон должен отлично работать поверх $nuxt.error
<template>
<div class="container">
<h1 v-if="error.statusCode === 404">Page not found</h1>
<h1 v-else>An error occurred</h1>
<NuxtLink to="/">Home page</NuxtLink>
</div>
</template>
<script>
export default {
props: ['error'],
}
</script>
Как показано в документации: https://nuxtjs.org/docs/2.x/directory-structure/layouts#error-page