так в Main.vue ?
Main.vue
data: () => ({
answers: []
}),
created () {
this.fetch('/answers')
},
methods: {
fetch (url) {
this.answers = Data.getAll(url)
}
}
data.js
import Base from './base.js'
export default {
getAll (resource) {
return Base.get(`${resource}`)
}
}
base.js
import axios from 'axios'
const baseDomain = 'http://localhost:3000'
const baseURL = `${baseDomain}/api/v1`
export default axios.create({
baseURL
// In case that you need a token:
// headers: { "Authorization": "Bearer yourToken" }
})
В общем, я мог только так реализовать свою идею. Идея заключается в использовании патерна фабрики, чтобы по необходимости можно было бы в getdata.js добавлять дополнительные методы axios для фильтрации. Код работает, но мне кажется он превратился в хлам. Есть какие идеи упростить ? main.vue import { factory } from '@/helpers/axios/factory.js' const getdata = factory.get('posts') export default { name: 'answers', resource: 'Answers', data: () => ({ url: '/answers', answers: [], isLoading: false }), created () { this.fetch('/answers') }, methods: { async fetch (url) { this.isLoading = true const { data } = await getdata.getAll(url) this.isLoading = false this.answers = data } } } factory.js import getdata from './getdata' const datax = { posts: getdata } export const factory = { get: name => datax[name] } getdata.js import Base from './base.js' export default { getAll (resource) { return Base.get(${resource}) } } base.js import axios from 'axios' const baseDomain = 'http://localhost:3000' const baseURL = ${baseDomain}/api/v1 export default axios.create({ baseURL // In case that you need a token: // headers: { "Authorization": "Bearer yourToken" } })
Обсуждают сегодня