我正在如下配置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
?
答案 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
模块
asyncData
async asyncData({ $axios }) {
const ip = await $axios.$get('http://icanhazip.com')
....
}
方法/创建/安装/等
methods: {
async fetchSomething() {
const ip = await this.$axios.$get('http://icanhazip.com')
....
}
}
{
actions: {
async getIP ({ commit }) {
const ip = await this.$axios.$get('http://icanhazip.com')
.......
}
}
}
// Normal usage with axios
let data = (await $axios.get('...')).data
// Fetch Style
let data = await $axios.$get('...')
下面是访问nuxt.js
$axios
模块的方法
请记住,这是做出此答案时的新v5.12.3
版本