用到的模塊:html
Vue: https://cn.vuejs.org/v2/guide/
Axios: http://www.axios-js.com/zh-cn/docs/
vant: https://youzan.github.io/vant/#/zh-CN/intro前端
可參考文章vue
server/contactApi.jsios
// 統一接口管理 const CONTACT_API = { // 獲取聯繫人列表 getContactList: { method: "get", url: "/contactList.json" } } export default CONTACT_API
server/http.jsgit
import axios from "axios"; import contactApi from "./contactApi" import {Toast} from "vant" let instance = axios.create({ baseURL: "/", timeout: 1000 // 毫秒 }) // 包裝請求方法的容器 const Http = {} for(let key in contactApi){ let api = contactApi[key] // async 做用,避免進入回調地獄 Http[key] = async function(data){ let response = {}; try{ response = await instance[api.method](api.url, {params: data}) }catch(err){ response = err; } return response; } } // 請求攔截器 instance.interceptors.request.use( config => { Toast.loading({ mask: false, duration: 0, // 一直存在 forbidClick: true, // 禁止點擊 message: "加載中..." }) return config; },()=>{ Toast.clear() Toast("請求出錯") } ) // 添加響應攔截器 instance.interceptors.response.use( res => { Toast.clear() return res.data; },()=>{ Toast.clear() Toast("請求出錯") } ) export default Http
main.jsgithub
// 把Http掛在到vue實例上,全局可用 Vue.prototype.$Http = Http
views/VantIndex.vuenpm
<template> <div> <!-- 聯繫人列表 --> <van-contact-list :list="list" /> </div> </template> <script> // 引入組件 import { ContactList } from "vant"; export default { name: "vantIndex", data() { return { list: [] }; }, // 註冊組件 components: { [ContactList.name]: ContactList }, methods: { async getContactList() { let res = await this.$Http.getContactList({ name: "Tom" }); this.list = res.data; } }, // mounted creared creared() { this.getContactList(); } }; </script>
router.jsjson
routes: [ { path: '/', name: 'index', component: () => import('./views/VantIndex.vue') } ]
{ "code": 200, "data": [ { "name": "張三", "tel": "13000000000", "id": 1 }, { "name": "李四", "tel": "13000000001", "id": 2 }, { "name": "王五", "tel": "13000000002", "id": 3 } ] }
啓動服務訪問測試axios
npm run serve