@haa

Как правильно подключить axios для vuex?

Использую nuxtjs/axios, создал плагин для работы как указали на сайте
export default function ({ $axios }, inject) {

  const api = $axios.create({
    headers: {
      common: {
        'X-Requested-With': 'XMLHttpRequest',
        'Accept'          : 'application/json',
      }
    }
  })

  api.setBaseURL('http://laravel/api/')

  inject('api', api)
}


Подключаю плагин
plugins: [
    '@/plugins/axios',
  ],


через хук beforeRouteEnter, вызываю action load_article
async beforeRouteEnter(to, from, next) {

    await store.dispatch('article/load_article', {
      id: to.params.id
    })

  }

при вызове получаю Uncaught (in promise) TypeError: _this.$api is undefined. То что undefined это понятно!
export const FETCH_ARTICLE = 'load_article'

export default {
	async [FETCH_ARTICLE]({ commit }, payload) {

		let endpoint = 'article/'+payload.id
		const data = ( await this.$api.get(endpoint) ).data

		commit(SET_ARTICLE, {
			data: data.data
		})
	},
}

Вопрос в том как в этом случае подключить axios? Использовал $axios.$get, получаю undefined

Подключал и без плагина, через nuxt.config.js файл
axios: {
    baseURL: 'http://laravel/api/',
  }
  • Вопрос задан
  • 214 просмотров
Решения вопроса 1
Axios нужно добавить в nuxt.config.js как модуль
https://axios.nuxtjs.org/setup#configure

Вместо beforeRouteEnter используйте fetch hook
https://nuxtjs.org/docs/features/data-fetching/

или nuxtServerInit если нужно вызывать метод на всех страницах
https://nuxtjs.org/docs/directory-structure/store/...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы