В моем Vue Router я использую глобальную навигационную охрану , чтобы проверить, требуется ли строка запроса (to.meta.query
) для запрошенного маршрута - если ничего не указано или значение равно нулю, перенаправить на родительский компонент и отправить ошибку .
router.beforeEach((to, from, next) => {
if(to.meta.query) {
let query = to.query;
let exists = Object.keys(query).filter(function (key) {
return query[key] !== null && query[key] !== ''
})
if (to.meta.query && exists.length < 1) {
let error = {
to: to.name,
type: "query"
}
store.commit('redirectError', error);
next({ name: 'Search', replace:true})
}
}
next()
})
В родительский компонент «Поиск» я включил компонент ошибки, который вычисляет сообщение об ошибке на основе «до»и «тип» объекта ошибки, извлеченного из хранилища:
computed: {
error: function () {
if (!isEmpty(this.$store.state.error)) {
this.errorTo = this.$store.state.error.to;
this.errorMessage = this.calcErrorMessage();
this.$store.commit('dispatchError', null);
return true;
}
return false;
}
},
и затем отображение самой ошибки с использованием v-модели ;
<b-alert variant="danger" dismissible v-model="error">
{{errorMessage}}
</b-alert>
Как можноЯ достигаю error
, будучи "реактивным".Поэтому, когда я изменяю маршрут на другой дочерний компонент, ошибка исчезает?Моя структура компонентов:
Search: (parent)
-SearchForm
-SearchResult
-SearchDetail
Редактировать:
Поместить все в собственную ошибку. Компонент