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格式太严格了,很多数据,调了一个多小 ...
随机推荐
- 2024盘古石取证比赛(APK)
题目列表 使用软件: Notepad++,火眼证据分析软件,雷电分析app,DB browser for SQLCipher 1. 分析伏季雅的手机检材,手机中诈骗APP的包名是:[答案格式:abc. ...
- Android 13 - Media框架(20)- ACodec(二)
关注公众号免费阅读全文,进入音视频开发技术分享群! 这一节开始我们就来学习 ACodec 的实现 1.创建 ACodec ACodec 是在 MediaCodec 中创建的,这里先贴出创建部分的代码: ...
- redis 基础管理
配置文件 优化redis配置文件定制 cat /nosql/redis/6379/redis.conf daemonize yes port 6379 logfile /nosql/redis/637 ...
- 第一次线上 OOM 事故,竟和 where 1 = 1 有关
这篇文章,聊聊一个大家经常使用的编程模式 :Mybatis +「where 1 = 1 」. 笔者人生第一次重大的线上事故 ,就是和使用了类似的编程模式 相关,所以印象极其深刻. 这几天在调试一段业务 ...
- k8s——pod(label和selector)
k8s的label和selector 在Kubernetes中,label和selector是两个重要的概念,它们一起用于实现资源对象的关联和调度. label 创建label 有两种方式创建labe ...
- dubbo~全局异常拦截器的使用与设计缺陷~续
上一次的介绍,主要围绕如何统一去捕获异常,以及为每一种异常添加自己的Mapper实现,并且我们知道,当在ExceptionMapper中返回非200的Response,不支持application/j ...
- 你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决?
首先,将问题提交到缺陷管理库里面进行备案. 然后,要获取判断的依据和标准: 根据需求说明书.产品说明.设计文档等,确认实际结果是否与计划有不一致的地方,提供缺陷是否确认的直接依据: 如果没有文档依据, ...
- 燕千云AITSM重塑IT服务管理
IT服务经历了三个阶段,缘起于设备管理,兴起于灾难恢复,发展于IT服务管理.IT服务发展到目前的阶段,企业所使用的系统功能也由孤立的系统转变为综合的集成系统,IT服务所管理的对象也由核心业务转变为 ...
- # android studio启动虚拟机长时间无响应,无法启动
问题 虚拟设备长时间不响应,无法启动设备 方案 根据 android studio启动虚拟器失败 尝试删除锁文件 失败,.android 目录下不存在锁文件 电脑内存或计算配置不足 查看了模拟器需要的 ...
- java redis api及test demo
1.CacheService.java package com.redis.demo; import com.alibaba.fastjson.JSON; import com.alibaba.fas ...