网站首页 > 技术文章 正文
- 本地开发环境请求服务器接口跨域问题
 - 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
 
- 最近发表
 - 
- 聊一下 gRPC 的 C++ 异步编程_grpc 异步流模式
 - [原创首发]安全日志管理中心实战(3)——开源NIDS之suricata部署
 - 超详细手把手搭建在ubuntu系统的FFmpeg环境
 - Nginx运维之路(Docker多段构建新版本并增加第三方模
 - 92.1K小星星,一款开源免费的远程桌面,让你告别付费远程控制!
 - Go 人脸识别教程_piwigo人脸识别
 - 安卓手机安装Termux——搭建移动服务器
 - ubuntu 安装开发环境(c/c++ 15)_ubuntu安装c++编译器
 - Rust开发环境搭建指南:从安装到镜像配置的零坑实践
 - Windows系统安装VirtualBox构造本地Linux开发环境
 
 
- 标签列表
 - 
- cmd/c (90)
 - c++中::是什么意思 (84)
 - 标签用于 (71)
 - 主键只能有一个吗 (77)
 - c#console.writeline不显示 (95)
 - pythoncase语句 (88)
 - es6includes (74)
 - sqlset (76)
 - apt-getinstall-y (100)
 - node_modules怎么生成 (87)
 - chromepost (71)
 - flexdirection (73)
 - c++int转char (80)
 - mysqlany_value (79)
 - static函数和普通函数 (84)
 - el-date-picker开始日期早于结束日期 (76)
 - js判断是否是json字符串 (75)
 - c语言min函数头文件 (77)
 - asynccallback (87)
 - localstorage.removeitem (77)
 - vector线程安全吗 (73)
 - java (73)
 - js数组插入 (83)
 - mac安装java (72)
 - 无效的列索引 (74)
 
 
