zoukankan      html  css  js  c++  java
  • 搭建一个vue-cli + ant design pro移动端开发模板

    利用vue-cli + vant搭建一个移动端开发模板

     

     

     

    本文系原创,转载请附带作者信息。项目地址: https://github.com/momozjm/vant-project.git

    前言

    在项目开发过程中,一个新的项目需要我们从零开始搭建框架,这个时候我们就可以用网上很多的脚手架进行开发,但是我们在业务开发时,还需要对项目的架构进行完善。如果有一个类似于ant design pro这种类型的项目可以拿来即用,不需要过多的配置,就可以进行开发的话,岂不是美滋滋。

    所以说为了便于后期的快速开发,我决定利用vue-cli+vant来打造一个移动端开发的模板,后期进行迭代,完善功能。

    项目功能模块(不断更新中...)

    项目代码

    整个项目的脚手架是用vue-cli生成的,具体的生成方式可以自己网上查阅。下面我就简单介绍一下项目中添加了哪些功能模块

    一、rem的适配

    使用postcss-pxtoremflexable.js结合的形式,适配各类机型。此配置是以2倍屏的基础来配置的,也就是说你的设计图也是以2倍屏设计的,这样设计图上的px值是多少你就可以直接拷过来,省去了px转rem的换算。

    1:postcss-pxtorem的配置:在vue.config.js中添加如下代码(需要自己新建vue.config.js文件)

    css: {
        loaderOptions: {
          postcss: {
            plugins: [
              require('postcss-pxtorem')({
                rootValue: 37.5, // 换算的基数
                propList: ['*'],
              }),
            ]
          }
        }
      }
    

    2:flexable.js。文件路径src>utils>flexable.js(我一般把项目需要的公共方法或者配置放在utils文件夹下)

    !function (n) {
        var e = n.document,
            t = e.documentElement,
            i = 750,
            d = i / 100,
            o = "orientationchange" in n ? "orientationchange" : "resize",
            a = function () {
                var n = t.clientWidth || 320; n > 750 && (n = 750);
                t.style.fontSize = n / d + "px"
            };
        e.addEventListener && (n.addEventListener(o, a, !1), e.addEventListener("DOMContentLoaded", a, !1))
    }(window)
    

    3:在main.js中引入flexable.js

    import '@/utils/flexable'
    

    二、axios请求封装

    1:request.js。文件路径src>utils>request.js

    import axios from 'axios'
    
    // 创建 axios 实例
    const service = axios.create({
      baseURL: process.env.VUE_APP_API_BASE_URL, // api base_url
      timeout: 6000 // 请求超时时间
    })
    
    const err = (error) => {
      if (error.response) {
        if (error.response.status !== 200) {
          console.log(error)
          return
        }
      }
      return Promise.reject(error)
    }
    
    // request interceptor
    service.interceptors.request.use(config => {
      // const token = 'token'
      // if (token) {
      //   config.headers['Access-Token'] = token // 让每个请求携带自定义 token 请根据实际情况自行修改
      // }
      return config
    }, err)
    
    // response interceptor
    service.interceptors.response.use((response) => {
      return response.data
    }, err)
    
    
    export {
      service as axios
    }
    
    

    三、vuex

    在views下新建了一个About.vue。在此组件中走了一遍异步获取数据的流程(接口是乱写的,报404)。大致流程为:页面触发action ---> action中异步回去数据并commit一个mutations ---> mutations中修改state里的值 ---> 视图更新

    1:About.vue

    <template>
      <div class="about">
        <Button type="primary" @click="getDetail" id="detail">点击调用接口获取详情</Button>
        <router-link to="/">Home</router-link>
        <router-link to="/scroll">Scroll</router-link>
      </div>
    </template>
    <script>
    import { mapState, mapActions } from "vuex";
    import { Button } from "vant";
    export default {
      computed: {
        ...mapState("about", ["detail"])
      },
      created() {
        // this.getDetail();
      },
      methods: {
        ...mapActions("about", ["getDetail"])
      },
      components: {
        Button
      }
    };
    </script>
    <style lang="less">
    .about {
      height: 100vh;
      font-size: 14px;
    }
    #detail {
      font-size: 14px;
    }
    </style>
    
    
    

    2:index.js。文件文职@>store>index.js

    import Vue from 'vue'
    import Vuex from 'vuex'
    import about from './modules/about'
    // import scroll from './modules/scroll'
    
    Vue.use(Vuex)
    
    export default new Vuex.Store({
      modules: {
        about,
        // scroll
      },
    })
    
    

    3:about.js。文件位置@>store>modules>about.js

    import { getDetailApi } from '@/api/api'
    
    const state = {
      detail: {}
    }
    
    const mutations = {
      setDetail: (state, data) => {
        state = {
          ...state,
          detail: data
        }
      }
    }
    
    const actions = {
      getDetail({ commit }) {
        getDetailApi().then(res => {
          commit('setDetail', res)
        })
      },
    }
    
    export default {
      namespaced: true,
      state,
      mutations,
      actions
    }
    
    

    4:api.js。 文件位置@>api>api.js

    import { axios } from '@/utils/request'
    
    const api = {
      // 获取详情
      detail: '/detail'
    }
    
    export function getDetailApi(parameter) {
      console.log(parameter)
      return axios({
        url: api.detail,
        method: 'get'
      })
    }
    
    // export function getDetail() {
    //   return axios({
    //     url: api.detail,
    //     method: 'post',
    //     data: {}
    //   })
    // }
    
    

    四、Vant

    新建一个页面添加了下拉刷新和上拉加载功能。后续会以组件的形式再封装一些常用的功能。

    Vant没有在main.js里全局注册,而是使用动态引入的方式。根目录新建.babelrc

    {
        "plugins": [
          ["import", {
            "libraryName": "vant",
            "libraryDirectory": "es",
            "style": true
          }]
        ]
      }
    

    五、webpack配置

    vue-cli3以后生成的项目,修改webpack都要在项目根目录新建一个vue.config.js来修改你的配置

    module.exports = {
      lintOnSave: true,
      // 生产环境打包资源路径
      publicPath: '/',
      outputDir: "dist",
      assetsDir: "static",
      // postcss-pxtorem配置
      css: {
        loaderOptions: {
          postcss: {
            plugins: [
              require('postcss-pxtorem')({
                rootValue: 37.5, // 换算的基数
                propList: ['*'],
              }),
            ]
          }
        }
      },
      // 代理
      devServer: {
        // development server port 8000
        // port: 8000,
        // // If you want to turn on the proxy, please remove the mockjs /src/main.jsL11
        // proxy: {
        //   "/api": {
        //     // target: "http://xx.xx.xx.xx:xxxx/",
        //     changeOrigin: true,
        //     pathRewrite: {
        //       '^/api': '/'
        //     }
        //   }
        // }
      },
      // 生产环境去掉sourceMap
      productionSourceMap: false,
    }
    
    

    总结

    这个框架只具备开发vue + vant的基本功能,总体上的目标算是达到了,后续也会迭代添加一些组件或者功能。整个过程中算是对自己架构能力进行一些锻炼。

  • 相关阅读:
    [开源]用MQL4实现MD5加密
    如何转换WMV到MP3,WMV到MP3播放器
    C# Winform TreeView 的一些基本用法
    WinServer 2008 远程桌面连接设置
    存储数据类型的转化总结
    EF中执行sql语句,以及事务
    C#(委托a)
    LINQ绑定List到GridView
    循环遍历DataTable绑定到Table
    要将 ASP.NET 访问权限授予某个文件,请在资源管理器中右击该文件,选择“属性”,然后选择“安全”选项卡。单击“添加”添加适当的用户或组。突出显示 ASP.NET 帐户,选中所需访问权限对应的框。
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/12890425.html
Copyright © 2011-2022 走看看