vue中封装api数据层访问层
api封装的是通过封装get/post/jsonp等请求,使得页面无需直接访问后代而是调用相关方法直接获取相关的后代数据,避免过多的数据处理逻辑,将重点放在数据渲染上。
1,准备阶段
a,首先创建api访问层(文件夹),新建两个文件分别叫axios和api的JavaScript文件。再api文件夹再新建一个文件夹base,用于存放请求路径,新建dev,pro,test,base_url四个js文件。
b,测试接口(github提供的测试接口)
| 请求地址 |
https://api.github.com/search/repositories
|
请求方式:get |
| 参数 | q:关键字 | sort:排行规则 |
| 实参 | v(我们通过关键字v来查看) | star(关键字为v的相关点赞数进行排行) |
2,axios封装
axios地址:http://www.axios-js.com/zh-cn/docs/vue-axios.html
这里是vue-axios的,是axios针对vue封装的接口请求,在这里我们直接封装原生的axios。
下载axios:
npm install axios --save
在axios文件:该文件用于封装请求方法,在此主要封装get和post方法。通过创建axios实例instance 。
import axios from 'axios'
import {BAES_URL} from './base/base_url'
//新建axios实例
const instance = axios.create({
baseURL: BAES_URL,
timeout: 5000,
});
//添加请求拦截器
axios.interceptors.request.use(function (config) {
// 在发送请求之前做些什么
return config;
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error);
});
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
// 对响应数据做点什么
return response;
}, function (error) {
// 对响应错误做点什么
return Promise.reject(error);
});
//封装get
let get=async (url,params)=>{
let {data}=await instance.get(url,{params})
return data
}
//封装post
let post=async (url,params)=>{
let {data}=await instance.post(url,params)
return data
}
//导出get和post
export {
get,
post
}
base_url文件用于封装请求路径,在里面有三个不同的路径,方便不同的开发时期切换请求路径。
import { dev } from './dev'
import { pro } from './pro'
import { test } from './test'
let urls={
dev,
pro,
test
}
//通过切换中括号来实现请求路径的切换
export let BAES_URL=urls['dev'].url
一般情况下,我们都是把路径都写在不同的文件中,再引入进来,dev文件用于存放开发阶段时的请求路径,pro文件用于存放生产阶段的请求路径,test用于存放测试阶段的请求路径。
dev文件
export let dev={
name:'开发环境',
url:'https://api.github.com'
}
pro文件:
export let pro={
name:'生产环境',
url:'https://api.github.com'
}
test文件:
export let test={
name:'测试环境',
url:'https://api.github.com'
}
3,封装api
api就是与后代进行交互的地方,定义了许多的请求方法向后台发请求。
import {get,post} from './axios'
//通过关键字获取star相关排行信息
export let starList=(params)=>{
return get('/search/repositories',params)
}
export let starLists=(params)=>{
return post('/search/repositories',params)
}
4,测试
这里直接通过调用starList方法获取相关后代内容,参数我们为v和star,在app.vue中
<template>
<div id="app">
aaa
<input type="button" value="dianwo" @click="okok">
</div>
</template>
<script>
import { starList } from './api/api'
export default {
data() {
return {
params:{
q:'v',
sort:"stars"
}
}
},
methods:{
async okok(){
let data=await starList(this.params)
console.log(data)
}
}
}
</script>
<style>
</style>
注意因为请求数据过大,如果报错,修改axios文件的timeout时间。
demo下载地址(设置不需要下载币了):https://download.csdn.net/download/qq_31539817/19650962
vue中封装api数据层访问层的更多相关文章
- 基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
在SqlSugar的开发框架的后端,我们基于Web API的封装了统一的返回结果,使得WebAPI的接口返回值更加简洁,而在前端,我们也需要统一对返回的结果进行解析,并获取和Web API接口对应的数 ...
- vue中如何实现数据的双向绑定
vue中如何实现数据的双向绑定 实现视图变化数据跟着变:分两步,上面get中的为第二步(即再次读取的时候会调用get方法得到之前设置的值,以此来实现动态改变) 由于直接写obj.name = this ...
- 在Vue中由后台数据循环生成多选框CheckBox时的注意事项
多选框是一种非常常见的功能,有时候我们会根据后台返回的数据进行多选框渲染,之前做项目时遇到循环生成多选框时,v-model绑定的值会随着选中与取消改变,但页面却不会变化 的情况,后来测试了一下,发现多 ...
- 在Vue中使用layer.js弹出层插件
layer.js(mobile)是一个小巧方便的弹出层插件,在之前的apicloud项目中被大量使用,但最近对apicloud的IDE.非常不友好的文档和极低的开发效率深感厌烦,决定弃用然后转向Vue ...
- 搞懂:MVVM模型以及VUE中的数据绑定数据劫持发布订阅模式
搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : model - view - viewmodel的缩写,说都能直接说出来 model:模型,view:视图,view-Model:视 ...
- vue 中一些API 或属性的常见用法
prop 官方解释:Prop 是你可以在组件上注册的一些自定义特性.当一个值传递给一个 prop 特性的时候,它就变成了那个组件实例的一个属性. 通俗点讲就是:prop是父组件用来传递数据的一个自定义 ...
- 如何在项目中封装api
一般在项目中,会有很多的api请求,无论在vue,angular,还是react中都应该把接口封装起来,方便后期的维护. 1.新建一个api文件 我们可以在项目的分目录下创建一个api文件夹,在这里面 ...
- vue中什么样的数据可以是在视图中显示
1. Vue中不可以添加不存在的属性,因为不存在的属性是没有getter和setter的. <div id="app"> {{msg.a}} {{msg.b}} < ...
- vue中修改了数据但视图无法更新的情况[转载]
我们有时候常碰到vue中明明修改了数据,但是视图无法更新,因此我总结了一点点碰到此类的情况: 1.v-for遍历的数组,当数组内容使用的是arr[0].xx =xx更改数据,vue无法监测到 数组数据 ...
- vue中引入json数据,不用本地请求
1.我的项目结构,需要在Daily.vue中引入daily.js中的json数据 2.把json数据放入一个js文件中,用exports导出,vscode的json格式太严格了,很多数据,调了一个多小 ...
随机推荐
- 记一次 .NET某工业设计软件 崩溃分析
一:背景 1. 讲故事 前些天有位朋友找到我,说他的软件在客户那边不知道什么原因崩掉了,从windows事件日志看崩溃在 clr 里,让我能否帮忙定位下,dump 也抓到了,既然dump有了,接下来就 ...
- k8s——pod探针
探针 简单理解: 容器内应用的检测机制,根据不同的探针来判断容器应用当前的状态 为什么会需要探针 # 情况一 现在有一个商品的微服务,跑着跑着突然内存溢出,程序崩掉了,外面的pod虽然在,但是也相当于 ...
- Your Post Title Here
VSCode 实时预览还需要执行 Markdown: Open Preview to the Side 命令来实现. 在命令窗口输入 Markdown: Open Preview to the Sid ...
- Centos7无法ping通内网、外网
主要检查网络的配置是否正确,我测试时使用的是VMware虚拟机,需要保证centos中的网络配置和VMware中的一致. (1)VMware的配置 网络适配器选择NAT模式 查看NAT设置,这里需要记 ...
- 从零开始的常用MySQL语句练习大全
先说一些废话 很多时候深入学习固然很重要,但是想要写下一篇给新手都能看得懂看的很香,并且老鸟可以查漏补缺的的练习博客,还是挺有难度, 所以今天尝试写一些关于MySQL的语句练习大全,供想要从零开始练习 ...
- kettle从入门到精通 第三十一课 mysql 数据连接连接池配置
无论开发应用程序还是做ETL研发,都离不开连接池的应用,如下是kettle中mysql 连接池设置界面,今天重点讲解下连接池中的参数配置. defaultAutoCommit 当 defaultAut ...
- ABC347题解
省流:输+赢 D 按位分析. 既然两个数异或后的结果是 \(C\),那就考虑 \(C\) 中为 \(1\) 的数中有几个是在 \(X\) 当中的. 假如 \(\text{a - popcnt(X) = ...
- edge浏览器禁用搜索工具栏或七七八八的东西
edge浏览器禁用搜索工具栏或七七八八的东西 在浏览器地址里输入: edge://flags/#edge-show-feature-recommendations 把"Show featur ...
- kettle从入门到精通 第六十九课 ETL之kettle kettle cdc mysql,轻松实现实时增量同步
1.之前kettle cdc mysql的时候使用的方案是canal+kafka+kettle,今天我们一起学习下使用kettle的插件Debezium直接cdc mysql. 注:CDC (Chan ...
- redis锁定商品解决并发售卖问题 RedisUtil工具类
redis锁定商品解决并发售卖问题 RedisUtil工具类 redis数据类型介绍: //伪代码,基本思路 //1.出redis,每次在选定商品之后,先检查redis是否已经锁定该商品,避免超卖.S ...