美文网首页那些年使用vue的各种问题
vue项目开发需要用到的东西(spa)

vue项目开发需要用到的东西(spa)

作者: zyghhhh | 来源:发表于2019-11-04 15:36 被阅读0次

    注: spa是单页面应用,就是通过路由跳转切换页面,vue默认是这样的,如果需要开发多页面应用如官网之类的网站需要用到vue-nuxt.js 详情参考文档
    1 首先vue项目开发必定会用到vue框架 这个必须会这就不多说了
    2 想要项目代码质量好,就少不了组件化模块化,组件封装这个也不多说了 vue得学
    3 重点就是需要做模块化 以及异步 传值的处理

    模块化以及优化处理

    1 路由懒加载(可以有效优化项目速度 还有cdn引入 下面会说)

       在router/index.js 路由页面中,尽量避免引入组件然后使用组件这样的形式,
        应该使用路由懒加载 以函数形式引入组件使用 比如下面这样
    
    image.png image.png

    组件懒加载

    image.png

    注册全局异步组件

    image.png

    2 全局路由守卫

    全局路由守卫可以做到统一处理路由登陆以及其他问题 也可以统一的做一些配置
    详情建议看文档或看其他博主博客
    

    3 axios拦截器

      axios是vue2 使用的发送请求的ajax库
      但一直发送的话代码重复过多,代码质量不高
      所以选用axios拦截器 可以做统一的请求发送和响应拦截,
    
      使用方法:
          在src文件夹下定义一个api文件夹用于存放请求模块和拦截器模块
          创建一个拦截器模块request.js文件
                1 引入库
                      import axios from 'axios'
                      import qs from 'qs'
                2 定义请求地址
                      var ip = 'https:/域名/aaa/xxx'
    
                      我有做一个线上线下的判断这样可以避免部署上线时改代码的麻烦
                      var ip = location.origin.indexOf(':808') >= 0 ? '/api' : 'https:/域名/aaa/xxx'
                      通过判断当前域名看是出于开发环境还是生产环境,
                      这样向服务器发送的请求不一样嘛,因为前端开发总有跨域问题嘛,
                      需要配置跨域代理,'/api'就是跨域代理
                3 创建axios实例
                      目的是添加到实例对象中作于拦截时做相应处理
                      const service = axios.create({
                              baseURL:ip,  //请求地址
                              timeout:5000, //超时时间
                    })
                4 做发送拦截处理
                      service.interceptors.request.use(config => {
                          //我的做法比较简单值判断了请求方式做了相应处理
                          //有更多需求可以做其他配置 详情百度
                            config.method === 'post'
                            ? config.data = qs.stringify({...config.data})
                            : config.data = {...config.params}
    
                              return config    //返回结果
                           },error => {
                              Promise.rejecet(error)
                        })
                5 做相应拦截处理  
                        service.interceptors.response.use(
                            response => {
                              //处理后端数据
                              if(response.data.data){
                           //在这里面可以做很多处理比如http状态码的判断,由于我比较懒就没弄
                              return response.data.data
                              }else{
                      // return response.data.msg
                                      console.log('请求出错,没有数据·······')
                              }
                       },
                      error => {
                          //做失败处理
                      return Promise.reject(error)
                  }
                  )
    
                6 在src/api/创建index.js请求发送模块
                      1 引入暴露的拦截器模块
                      import service from './request.js'
                      2  定义请求并暴露出去
                      export const getNavigation = params => {
                      // console.log(JSON.parse(params))  //打印 data : {type:'1'}
                          return service({
                          //请求地址  这里只有路由后缀,因为到拦截器中地址会进行拼串,详情可以在拦截器模块中打印config查看
                                url:'/facility.do',     
                          //请求方式
                               method:'get',
                          //请求参数 这里说明 get请求接受的就是params post就是data 踩过坑了
                                params
                        })
                      }  
    
                7 最后在组件中引入使用
    

    4 vuex

    强烈推荐文章 https://segmentfault.com/a/1190000015782272?utm_source=tag-newest

    5 打包体积过大问题(对项目线上速度也有所帮助)

      1 修改配置不打包出.map文件
            修改config/index.js 中的productionSourceMap:false 不打包出.map文件
      2 不打包一些文件
            第一步: 在build/webpack.base.conf.js 里添加
            externals: {
                //也可以自行添加 但有些需要大写 需注意
                'vue': 'Vue',
                'axios': 'axios',
                'vue-router': 'VueRouter',
                'vuex':'Vuex',
                'qs':'Qs'
              },
            第二步: 在index.html中 从cdn上引入这些库 最好选xxx.min.js 因为体积比较小

    相关文章

      网友评论

        本文标题:vue项目开发需要用到的东西(spa)

        本文链接:https://www.haomeiwen.com/subject/pwpgvctx.html