踩坑
post 请求
参数 data 如果直接写 参数会在请求体 以 JOSN
export function orderList(data) { return request({ url: 'xxx', method: 'post', data }) } // 如果写成parms:data 参数会跟在请求后面 类似get请求 export function orderList(data) { return request({ url: 'xxx', method: 'post', parms: data }) }
前后端 sse 通讯
if (window.EventSource) { window.source = new EventSource('message') window.source.addEventListener('open', () => {}) // 监听服务器发来的消息 或用source.onmessage=()=>{} window.source.addEventListener('message', () => {}) // 监听异常 window.source.addEventListener('error', () => {}) } window.soure.close() // 关闭并发请求
css 实现盒子固定宽度外左右滑动
display: -webkit-box; overflow-x: scroll
将 px 单位转为 rem
1、安装 postcss-px2rem
npm i postcss-px2rem --save -dev
2、进入 vue.config.js 配置
const px2rem = require('postcss-px2rem') const postcss = px2rem({ remUnit: 10 //基准大小 baseSize,需要下方html除后的数字相同 }) module.exports = { /* 注意sass,scss,less的配置 */ productionSourceMap: false, // 生产环境是否生成 sourceMap 文件 css: { loaderOptions: { postcss: { plugins: [postcss] } } } }
3、进入 publci 的 index.html
function getHtmlFontSize() { //获取设备宽度 let deviceWidth = document.documentElement.clientWidth || window.innerWidth console.log('[设备宽度]', deviceWidth) if (deviceWidth >= 750) { deviceWidth = 750 } else if (deviceWidth <= 320) { deviceWidth = 320 } //设置html的字体大小 document.documentElement.style.fontSize = deviceWidth / 37.5 + 'px' } getHtmlFontSize() window.addEventListener('resize', getHtmlFontSize)
滚动至容器底部
<div ref='chatMain'><div> scrollEnd(){ this.$nextTick(()=>{ const chat = this.$refs.chatMain chat.scrollTop = chat.scrollHeight-chat.clientHeight }) }
获取 url 上的参数
const geturl = window.location.href // http://localhost:8081/#/pages/index/index?id=1001&name=zs const info = geturl.split('?')[1] //id=1001&name=zs 截取到参数部分 const getqys = new URLSearchParams('?' + info) //将参数放在URLSearchParams函数中 const id = getqys.get('id') // 1001 const name = getqys.get('name') // zs
设置容器为可编辑并可添加表情及 placehodler
1、添加 placehodler
<div class="editable-div" contenteditable="true" placegolder='请输入'> <style> .editable-div:empty:before { position: absolute; content: attr(placegolder); background-color: transparent; color: #4d4d4d; } </style>
2、添加图片
const insertImage = () => { const editableDiv = document.getElementById('editableDiv') const imgSrc = 'https://via.placeholder.com/150' // 这里替换为你要插入的图片的 URL // 创建一个新的 img 元素 const img = document.createElement('img') img.src = imgSrc // 添加 data-src 属性 img.setAttribute('data-src', 'xxxxx') // 保存当前光标位置 const sel = window.getSelection() const range = sel.getRangeAt(0) // 在光标位置插入 img 元素 range.insertNode(img) range.setStartAfter(img) // 恢复光标位置 sel.removeAllRanges() sel.addRange(range) // 使 div 重新聚焦 editableDiv.focus() }
3、data-src 为图片内容传给后端的字段 需要对 div 的内容进行处理
const dealMsg = () => { const element = document.getElementById('editableDiv') const content = element.innerHTML // inputValue 为传给后端的字段 this.inputValue = content // 如果有图片 if (element.querySelector('img')) { this.inputValue = content.replace(/<img.*?(?:>|\/>)/gi, text => { const dataSrc = text.match(/data-src="(.+)"/) return dataSrc[1] ? dataSrc[1] : '' }) } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了