如何在Nuxt.js的Vuex的实用程序函数中使用`$ axios`

时间:2019-02-07 09:51:17

标签: javascript vue.js axios vuex nuxt.js

我正在如下配置Nuxt.js的VUEX。

store
├── README.md
├── posts
│   ├── actions.js
│   ├── getters.js
│   ├── index.js
│   ├── mutations.js
│   └── utils
│       └── getPostById.js
└── index.js

我在nuxt.config.js的模块中添加了@nuxtjs/axios,并可以在动作中使用this.$axios.$get
但是,您不能在store / posts / utils / getPostById.js中使用A。
发生错误Cannot read property '$axios' of undefined

每个代码描述如下。

・ store / index.js

import Vuex from 'vuex'
import postsModule from './posts'

new Vuex.Store({
  modules: {
    posts: postsModule
  }
})

・ store / posts / index.js

import actions from './actions'
import getters from './getters'
import mutations from './mutations'

export const state = () => ({
  posts: [],
  post: {}
})

export default {
  namespaced: true,
  state,
  actions,
  getters,
  mutations
}

・ store / posts / actions.js

import getPostById from './utils/getPostById'

export default {
  async fetchPost({ commit }, count = 10) {
    const params = { count: count }
    // Here `$axios` can be used normally
    const result = await this.$axios.$get("ApiUrl")
    commit('setPosts', result)
  },
  async fetchPostById({ commit }, category_ids, count = 10) {
    const topCommunities = {}
    const result = await getPostById(id)
    commit('setPost', result)
  }
}

・ store / posts / utils / getPostById.js

export default async function(post_id) {
  // Here `$axios` can not use
  const result = await this.$axios.$get(`${ApiUrl}/${post_id}`)
  return result
}

如何在this.$axios.$get中使用getPostById.js

3 个答案:

答案 0 :(得分:1)

据我所知,您只能在商店中的操作下访问nuxtServerInit()中的axios,

async nuxtServerInit ({ commit }, { $axios }) {
  const ip = await $axios.$get('http://icanhazip.com')
  commit('SET_IP', ip)
}

请查看此页面https://axios.nuxtjs.org/usage,以获取有关如何在NuxtJS项目中使用axios的更多信息。

答案 1 :(得分:1)

自问题发布以来,很多事情已经改变。现在,您可以通过$axios访问商店中的this.$axios实用程序。 nuxt插件使用inject使$axios对象在商店中可用,如here所述。

例如:

export const actions = {
    async fetchUser () {
        let user = await this.$axios.$get('/me');
    }
}

答案 2 :(得分:1)

这里直接使用axios中的nuxt.js模块

  1. 组件

asyncData

async asyncData({ $axios }) {
  const ip = await $axios.$get('http://icanhazip.com')
  ....
}

方法/创建/安装/等

methods: {
  async fetchSomething() {
    const ip = await this.$axios.$get('http://icanhazip.com')
    ....
  }
}
  1. 存储操作
{
  actions: {
    async getIP ({ commit }) {
      const ip = await this.$axios.$get('http://icanhazip.com')
      .......
    }
  }
}
  1. 快捷方式
// Normal usage with axios
let data = (await $axios.get('...')).data

// Fetch Style
let data = await $axios.$get('...')

下面是访问nuxt.js $axios模块的方法

请记住,这是做出此答案时的新v5.12.3版本

还要选中此axios module link from nuxt js website