vue入门:对vue项目中api接口的封装管理

JavaScript017

vue入门:对vue项目中api接口的封装管理,第1张

在以前的文档中,我们构建了vue项目的整体架构,详见 vue入门:vue项目架构设计起步 ,现在我们主要对其中的api接口封装进行完善,并将过程做个记录,与之分享。

很多朋友在开发过程中,习惯性直接将api的调用写在单个组件之中,就直接调用请求。例如:

在前端项目开发中,从整体架构出发,我们可以将项目中所有api进行封装,从而便于我们进行统一管理。

在src目录下,新建api文件夹,在api文件夹下创建index.js和api.js。

1、api.js。主要用来统一管理项目所有api请求。 如下:

import axios from 'axios'

let host = window.g.ApiUrl

// 获取主页信息

export const getindex = params =>{ return axios.get(`${host}/api/index/`, { params: params }) }

// 获取城市信息

export const getcity = params =>{ return axios.get(`${host}/api/city/`) }

// 获取详细信息

export const getdetail = params =>{ return axios.get(`${host}/api/detail/`, { params: params }) }

// 注册

export const postRegister = params =>{ return axios.post(`${host}/api/register/`, { params: params }) }

2、index.js。主要用来输出api,供外部引入。 如下:

import * as api from './api'

export default api

3、在组件中调用api接口 。例如:

这样,我们就可以在api.js中查阅到项目中所有api接口的调用,便于接口的管理。

在 Vue.js 中使用第三方库的方式有:

1.全局变量

在项目中添加第三方库的最简单方式是讲其作为一个全局变量, 挂载到 window 对象上:

entry.js

window._ = require('lodash')

MyComponent.vue

export default {

created() {

console.log(_.isEmpty() ? 'Lodash everywhere!' : 'Uh oh..')

}

}

这种方式不适合于服务端渲染, 因为服务端没有 window 对象, 是 undefined, 当试图去访问属性时会报错.

2.在每个文件中引入

另一个简单的方式是在每一个需要该库的文件中导入:

MyComponent.vue

import _ from 'lodash'

export default {

created() {

console.log(_.isEmpty() ? 'Lodash is available here!' : 'Uh oh..')

}

}

这种方式是允许的, 但是比较繁琐, 并且带来的问题是: 你必须记住在哪些文件引用了该库, 如果项目不再依赖这个库时, 得去找到每一个引用该库的文件并删除该库的引用. 如果构建工具没设置正确, 可能导致该库的多份拷贝被引用.

3.优雅的方式

在 Vuejs 项目中使用 JavaScript 库的一个优雅方式是讲其代理到 Vue 的原型对象上去. 按照这种方式, 我们引入 Moment 库:

entry.js

import moment from 'moment'

Object.defineProperty(Vue.prototype, '$moment', { value: moment })

由于所有的组件都会从 Vue 的原型对象上继承它们的方法, 因此在所有组件/实例中都可以通过 this.$moment: 的方式访问 Moment 而不需要定义全局变量或者手动的引入.

MyNewComponent.vue

export default {

created() {

console.log('The time is ' . this.$moment().format("HH:mm"))

}

}