网站首页 > 技术文章 正文
- 本地开发环境请求服务器接口跨域问题
- axios封装和api接口的统一管理
- UI库的引入
- 覆盖当前UI库中组件的样式
- rem文件的导入问题
- 定时器
- 打包后.map文件很大
- 开启gizp压缩代码
- mixins常见操作
- 打包之后路径找不到的问题
本地开发请求服务器接口跨域问题
这应该是每个新手或者说不熟悉vue的人的必经之路。
本地开发请求服务器接口的时候,因为客户端的同源策略,所以会出现跨域。遇到这种问题直接在vue.config.js中配置代理。
proxy: {
//配置跨域
'/api': {
target: "http://localhost:8888",
// ws:true,
changOrigin:true, //启动跨域
pathRewrite:{
'^/api':'/'
}
}
target设置成你调用的接口域名和端口号,pathRewrite这里其实就是用/api代替target里的地址。
注意:配置好之后一定要重新跑一下项目(npm run dev)
axios封装和api接口的统一管理
一般都是在根目录下创建一个工具类的文件夹 ,然后新建一个request.js(名字可以自定义),然后定义个api.js,前者是用来封装axios,后者是用来统一管理api接口。
request.js
import axios from 'axios'
import store from '@/store'
import { Toast } from 'vant'
// 根据环境不同引入不同api地址
import { baseApi } from '@/config'
console.log(baseApi)
// create an axios instance
const service = axios.create({
baseURL: baseApi, // url = base api url + request url
withCredentials: true, // send cookies when cross-domain requests
// timeout: 5000 // request timeout
})
// request拦截器 request interceptor
service.interceptors.request.use(
config => {
// 不传递默认开启loading
if (!config.hideloading) {
// loading
Toast.loading({
duration: 0,
forbidClick: true
})
}
if (store.getters.token) {
config.headers['X-Token'] = ''
}
return config
},
error => {
// do something with request error
console.log(error) // for debug
return Promise.reject(error)
}
)
// respone拦截器
service.interceptors.response.use(
response => {
Toast.clear()
const res = response.data
if (res.status && res.status !== 200) {
// 登录超时,重新登录
if (res.status === 401) {
store.dispatch('FedLogOut').then(() => {
location.reload()
})
}
return Promise.reject(res || 'error')
} else {
return Promise.resolve(res)
}
},
error => {
Toast.clear()
console.log('err' + error) // for debug
return Promise.reject(error)
}
)
export default service
api.js
import api from './index'
// axios
import request from '@/utils/request'
export function queryPageNews(data) {
return request({
url: api.queryPageNews,
method: 'post',
data
})
由于时间关系,之后我们再做一期axios封装和api接口的统一管理,再对这个封装细化 优化,比如。分模块以及断网情况的分析。
UI库的引入
这里说的ui库是vant,其他的依次类推的。
安装
npm vant -S
安装babel-plugin-import插件使其按需加载
npm i babel-plugin-import -D
然后在 .babelrc文件中中添加插件配置 :
libraryDirectory {
"plugins": [
// 这里是原来的代码部分
// …………
// 这里是要我们配置的代码
["import",
{
"libraryName": "vant",
"libraryDirectory": "es",
"style": true
}
]
]
}
在main.js中按需加载你的插件
// 按需引入vant组件
import {
DatetimePicker,
Button,
List
} from 'vant';
覆盖当前UI库中组件的样式
我们正常写的所有样式,都会被加上[data-v-23d425f8]这个属性,第三个组件内部的标签并没有编译[data-v-23d425f8]这个属性,所以就没有办法修改。但是,一般我们都是直接行内添加class,然后在一个公共的css中写样式,但是会遇到一个问题。如果你在当前页面加上了socped属性,那就没有效果。
但是通过深度选择器解决。
.vant-tabs /deep/ .footer{color:red}
当然了这里的深度选择器前提是用了less/sass语言,如果没有的话就用>>>符号,是一样的效果。
猜你喜欢
- 2024-10-02 Vue3,Vuex,集中式状态(数据)管理,四个模块:state、getter
- 2024-10-02 Vue核心知识:8.4 如何在组件中去使用vuex的值和方法?
- 2024-10-02 Netflix 开源危机管理工具 Dispatch,真香
- 2024-10-02 Vuex基本使用(vuex的基本使用)
- 2024-10-02 vue组件间传递参数的几种方式(vue组件之间的参数传递)
- 2024-10-02 vue前端实现与安卓和ios之间的通信
- 2024-10-02 2024前端面试题(三)(2021前端最新面试题)
- 2024-10-02 Vue.js应用的四种AJAX请求数据模式以及优缺点
- 2024-10-02 总结4个方面优化Vue项目(如何优化vue项目)
- 2024-10-02 Node + Express + Mysql + Vue 全栈开发项目:Todo List
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)