Если вы ищете способ получить состояние загрузки для компонентов вашей страницы, вы можете использовать данные с asyncData,
data(){
return{
loading: true
}
},
async asyncData(context) {
try{
const res = await context.app.$prismic.api.query(context.app.$prismic.predicates.at('my.category.uid', context.app.$route.params.sub))
const el = res.results[0]
const query = await context.app.$prismic.api.query([context.app.$prismic.predicates.at('document.type','sub-category'), context.app.$prismic.predicates.at('my.sub-category.category', el.id)], { orderings: '[my.sub-category.position, my.sub-category.title]' })
const docs = query.results
const loading = false
return {docs, el, loading}
}
catch (e) {
console.log(e)
}
}
, если вы используете prismi c, (и если вы не делали ' не зарегистрируйте его как плагин) вы можете добавить prismi c в контекст через плагин
import prismic from 'prismic-javascript'
export default (inject) => {
inject('prismic', prismic)
}
Так что теперь у вас есть доступ к $ prismi c в контексте.
Другой подход, который я использую при работе с состояниями загрузки, - это использование модуля хранилища для обработки состояния запроса.
plugins/loading.js
export default ({store},inject) => {
inject('changeLoading', function(){
store.dispatch('changeLoading')
}
)
}
store/index.js
export const state = () => ({
loading: false
});
export const mutations = {
CHANGE_LOADING(state){
state.loading = !state.loading
}
}
export const actions = {
changeLoading({commit}){
commit('CHANGE_LOADING')
}
}
export const getters = {
getLoading(state){
return state.loading
}
}
поэтому теперь вместо локального состояния загрузки внутри ваших компонентов у вас будет централизованное состояние внутри вашего магазина, которое вы можете изменить и получить.
data(){
return{
loading: this.$store.getters['getLoading']
}
},
async asyncData(context) {
try{
context.app.$changeLoading()
const prismicData = await context.app.$prismic(...)
context.app.$changeLoading()
return {prismicData}
}
catch (e) {
context.app.$changeLoading()
console.log(e)
}
}