上一章,咱們認識了項目的目錄結構,以及對項目的目錄結構作了一些調整,已經能把項目從新跑起來了。今天咱們來搭建api接口調用工具Axios。Vue自己是不支持ajax調用的,若是你須要這些功能就須要安裝對應的工具。javascript
支持ajax請求的工具不少,像superagent和axios。今天咱們用的就是axios,由於據說最近網上大部分的教程書籍都使用的是axios,自己axios這個工具就已經作了很好的優化和封裝,可是在使用時,仍是比較繁瑣,因此咱們來從新封裝一下。vue
安裝Axios工具java
cnpm install axios -D
在安裝的時候,必定要切換進入我們的項目根目錄,再運行安裝命令,而後如提示以上信息,則表示安裝完成。node
封裝Axios工具
編輯src/api/index.js文件(咱們在上一章整理目錄結構時,在src/api/目錄新建了一個空的index.js文件),如今咱們爲該文件填寫內容。webpack
// 配置API接口地址 var root = 'https://cnodejs.org/api/v1' // 引用axios var axios = require('axios') // 自定義判斷元素類型JS function toType (obj) { return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase() } // 參數過濾函數 function filterNull (o) { for (var key in o) { if (o[key] === null) { delete o[key] } if (toType(o[key]) === 'string') { o[key] = o[key].trim() } else if (toType(o[key]) === 'object') { o[key] = filterNull(o[key]) } else if (toType(o[key]) === 'array') { o[key] = filterNull(o[key]) } } return o } /* 接口處理函數 這個函數每一個項目都是不同的,我如今調整的是適用於 https://cnodejs.org/api/v1 的接口,若是是其餘接口 須要根據接口的參數進行調整。參考說明文檔地址: https://cnodejs.org/topic/5378720ed6e2d16149fa16bd 主要是,不一樣的接口的成功標識和失敗提示是不一致的。 另外,不一樣的項目的處理方法也是不一致的,這裏出錯就是簡單的alert */ function apiAxios (method, url, params, success, failure) { if (params) { params = filterNull(params) } axios({ method: method, url: url, data: method === 'POST' || method === 'PUT' ? params : null, params: method === 'GET' || method === 'DELETE' ? params : null, baseURL: root, withCredentials: false }) .then(function (res) { if (res.data.success === true) { if (success) { success(res.data) } } else { if (failure) { failure(res.data) } else { window.alert('error: ' + JSON.stringify(res.data)) } } }) .catch(function (err) { let res = err.response if (err) { window.alert('api error, HTTP CODE: ' + res.status) } }) } // 返回在vue模板中的調用接口 export default { get: function (url, params, success, failure) { return apiAxios('GET', url, params, success, failure) }, post: function (url, params, success, failure) { return apiAxios('POST', url, params, success, failure) }, put: function (url, params, success, failure) { return apiAxios('PUT', url, params, success, failure) }, delete: function (url, params, success, failure) { return apiAxios('DELETE', url, params, success, failure) } }
更多關於AxIos的解釋請參見:https://github.com/mzabriskie/axiosios
配置Axios工具
咱們在使用以前,須要在src/main.js中進行簡單的配置,先來看一下原始的main.js文件git
// The Vue build version to load with the `import` command // (runtime-only or standalone) has been set in webpack.base.conf with an alias. import Vue from 'vue' import App from './App' import router from './router' Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ el: '#app', router, template: '<App/>', components: { App } })
修改成:github
// The Vue build version to load with the `import` command // (runtime-only or standalone) has been set in webpack.base.conf with an alias. import Vue from 'vue' import App from './App' import router from './router' // 引用API文件 import api from './api/index.js' // 將API方法綁定到全局 Vue.prototype.$api = api Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ el: '#app', router, template: '<App/>', components: { App } })
經過以上的配置,咱們就能夠在項目中使用axios工具了,接下來咱們來測試一下這個工具。web
使用Axios工具
咱們來修改一下 src/page/Index.vue 文件,將代碼調整爲如下代碼:ajax
<template> <div>index page</div> </template> <script> export default { created () { this.$api.get('topics', null, r => { console.log(r) }) } } </script>
咱們在Index.vue中向瀏覽器的控制檯輸入一些接口請求到的數據,若是你和我也同樣,那說明咱們的接口配置完成正確。以下圖:
若是你是按個人操做一步一步來,那最終結果應該和我同樣。若是出錯請仔細檢查代碼。