# 点击时获取事件对象
<template>
<button @click="test(1,2,$event)">按钮</button>
</template>
<script lang="ts" setup>
function test(a:number,b:number,c:Event){
//获取事件对象
console.log(c)
}
</script>
# 跨域参数配置
# 跨域相关参数
withCredentials:是否允许带cookie,true时服务端需要设置SupportsCredentials=true
import axios from 'axios'
import router from './../router'
import comm from './comm'
//axios.defaults.baseURL='/api';
const myAxios = axios.create({
// 只要发送axios请求,就在请求前加入/api的开头,例如 /zzz/one -> /api/zzz/one
baseURL: '/api',
// 设置超时时间 5s
timeout: 10000,
responseType: 'json',
// 是否允许带cookie,true时服务端需要设置SupportsCredentials
withCredentials: false,
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
}
})
// POST传参序列化(添加请求拦截器)
myAxios.interceptors.request.use(
config => {
// 在发送请求之前做某件事
if (config.method === 'post' || config.method === 'put' || config.method === 'delete') {
// 序列化
const data = new FormData()
Object.keys(config.data).forEach(item => {
data.append(item, config.data[item])
})
config.data = data
}
if (localStorage.getItem('token')) {
config.headers.Authorization = localStorage.token
}
console.log(config.data)
return config
},
error => {
comm.toast(error.data.message)
return Promise.reject(error.data.message)
}
)
// 返回状态判断(添加响应拦截器)
myAxios.interceptors.response.use(
res => {
// 对响应数据做些事
if (res.data && res.data.code !== 1) {
comm.toast(res.data.msg)
return Promise.reject(res.data.msg)
}
return res.data
},
error => {
// 若是发现有鉴权的基础信息
if (localStorage.getItem('loginUserBaseInfo')) {
// 并且当前的时间大于服务器过期的时间
const loginUserBaseInfo = window.localStorage.getItem('loginUserBaseInfo')
const lifeTime = JSON.parse(loginUserBaseInfo).lifeTime * 1000
const nowTime = new Date().getTime()
if (nowTime > lifeTime) {
localStorage.removeItem('loginUserBaseInfo')
comm.toast('登录状态信息过期,请重新登录')
router.push({
path: '/login'
})
}
} else {
console.log(error)
// 服务器状态码不是200的情况,这些自定义
comm.toast(error.response.data.Message)
}
return Promise.reject(error.response)
}
)
export default myAxios
devServer: {
proxy: {
// 二级目录的一定要写在前面
'/api/wfs': {
target: 'http://localhost:8000',
changeOrigin: true,
pathRewrite: {
'^/dev-api/wfs': ''
},
logLevel: 'debug', // 可在控制台打印真实地址
},
'/api': {
disableHostCheck:true, // 当设置为true时,此选项将绕过主机检查
// 默认情况下是/,所以您可以作为http://localhost:8080使用
// 更改为 /assets/ 就变为 http://localhost:8080/assets
publicPath: '/assets/',
target: 'http://expo.sdxsk.com/api', //请求接口域名
ws: true,
secure: false,
// 是否允许跨域
changOrigin: true,
// 如果配置了axios的baseURL为'/api',在这里需要用空字符串代替
pathRewrite: {
'^/api': ''
}
}
}
}
// 这个是对所有的接口都代理的,不止是检测到 /api 的接口
// 当请求了前端不存在的资源时,那么该请求会转发给服务器(优先匹配前端资源)
devServer: {
proxy: 'http://e.dxy.net'
}
在Vue项目中配置了代理,但是部署之后不生效,并且报404
这是因为Vue配置的代理仅在本地开发下有效,部署之后,需要:
- 在nginx中进行配置代理
- 或者后端配置跨域
# vue2相关设置
devServer: {
host: '0.0.0.0',
port: port,
open: true,
proxy: {
[process.env.VUE_APP_BASE_API]: {
target: `http://128.169.21.56:8081`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''
}
}
},
disableHostCheck: true
}
# vue3相关设置
server: {
host: "localhost",
port: 3002,
proxy: {
// "/api/":
[ENV.VITE_API_URL]: {
target: "http://125.125.35.24:8088",
changeOrigin: true,
// rewrite: (path) => path.replace(/^\/api/, "")
rewrite: (p) => p.replace(RegExp(`^${ENV.VITE_API_URL}`), "")
}
}
}
# 监听元素变化
noMounted(() => {
// 创建一个观察器实例并传入回调函数
domOberver = new MutationObserver((mList, ob) => {
autoNiceHeight()
})
// 观察器的配置(需要观察什么变动)
const config = {
attributes: true,
childList: true,
subtree: true
}
// 配置开始观察的目标节点
domObserver.observe(dialogRef.value, config)
})
onUnmounted(() => {
// 停止观察
domObserver.disconnect()
})
function autoNiceHeight(){
const isExceed = warpperEle.offsetHeight <
dialogRef.value.offsetHeight + dialogRef.value.offsetTop
if(isExceed){
const niceHeight = warpperEle.offsetHeight - dialogRef.value.offsetTop
dialogRef.value.style.height = autoUnit(niceHeight)
}
}
← 语法使用