Vue搭建移动端WebApp

Posted Reaper爱编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue搭建移动端WebApp相关的知识,希望对你有一定的参考价值。

vue.js(2.x)搭建web项目

安装开发环境

1.安装node环境

下载地址:下载地址:https://nodejs.org/en/

2.vue版本和vue.cli3.x脚手架

1.全局安装vue-cli

npm install --global @vue/cli

2.命令行cmd进入创建项目的目录,完成配置

vue create [项目名]

3.启动项目

cd [项目根目录]

npm run serve

配置项目路由

1.创建router路由文件

1.在src根目录创建router.js配置

import Vue from "vue";

import Router from "vue-router";

Vue.use(Router);


const routes = [

  {

    path: "/",

   redirect: "/register",

  },


];





// 加载components目录下面的路由

importComponents(require.context(\'../components\', true, /\\.vue$/, \'lazy\'))



function importComponents(r) {

  r.keys().forEach(key => {

    routes.push({

      path: key.substring(key.indexOf(\'/\'), key.lastIndexOf(\'.\')),

      component: () => r(key),

      meta: {requireAuth: false}

    })

  });

}



const router = new Router({

  routes,

  scrollBehavior() {

    return {x: 0, y: 0} //路由跳转置顶

  }

});



// 路由拦截器

router.beforeEach((to,from,next) => {

next()

})



export default router;

2.router.js文件分析

<font color=\'cornflowerblue\'>1.利用node中importComponents自动化配置路由</font>

importComponents(require.context(\'../components\', true, /\\.vue$/, \'lazy\'))



function* importComponents(r) {

  console.dir(r);

  r.keys().forEach(key => {

       routes.push({

     path: key.substring(key.indexOf(\'/\'), key.lastIndexOf(\'.\')),

      component: () => r(key),

     meta: {requireAuth: false}

    })

  });

}

<font color=\'cornflowerblue\'>2.router.beforeEach路由拦截器</font>

//控制路由 比如说token的认证
router.beforeEach((to,from,next) => {

next()

})

数据请求axios封装

1.安装axios依赖包

npm i axios

2.封装axios

1.src根目录创建http文件以及index.js

<font color=\'orange\'>代码示例:</font>

  •   * import axios from \'axios\'
        import Store from \'../vuex/index\'
     
       const ConfigBaseURL = \'后端api地址\'
     
       //使用create方法创建axios实例
       export const Service = axios.create({
           timeout: 10000, // 请求超时时间
           baseURL: ConfigBaseURL,
           method: \'post\',
           headers: {
               \'Content-Type\': \'application/json;charset=utf-8\',
               Authorization:""
           },
           validateStatus: function (status) {
               return status >= 200 && status < 300; // 默认的
           },
       })
     
       /**
     
        * axios请求拦截器
          */
          let timerEnd,timestamp;
          Service.interceptors.request.use(function (config) {
          // 对所有POST请加密,必须是json数据提交,不支持表单
          timestamp = Date.parse(new Date());
          // Store.commit("showLoading");
     
          if (config.url == "/api/User/ClientLoginAndRegist"||config.url=="/api/User/IdCardExists") {
              return config
          }
          if (!sessionStorage.getItem("token")){// config.data = {
              //     ciphertext: Aes.EncryptData(config.data)
              // }
              config.headers.Authorization = "Bearer "+sessionStorage.getItem("token");

     return config;

     }
     // return config
     //TODO:加密
     if (config.method == "post" && config.headers["Content-Type"] != "multipart/form-data"&&sessionStorage.getItem("token")) {
             config.headers.Authorization = `Bearer  ${sessionStorage.getItem("token")}`;
             // config.data = {
             //     ciphertext: Aes.EncryptData(config.data)
             // }
             return config;
         }
         return config
     }, function (error) {
     // 对请求错误做些什么
     Store.commit("hideLoading");
     return Promise.reject(error);
     })

  /**

   * axios响应拦截器

   * */
     Service.interceptors.response.use(function (response) {
      // 后端返回字符串表示需要解密操作
      //TODO 解密
      // if (typeof (response.data.data) == "string") {
      //     response.data.data = JSON.parse(Aes.DecryptData(response.data.data));
      // }

      return response;
     }, function (error) {
      if (error&&error.response){
          switch (error.response.status) {
              case 400:
                  error.message="错误请求!"
                  break;
              case 401:
                  error.message="未授权,请重新登录!"
                  break;
              case 403:
                  error.message="拒绝访问!"
                  break;
              case 404:
                  error.message="请求错误,未找到资源!"
                  break;
              case 405:
                  error.message="请求方法未允许!"
                  break;
              case 500:
                  error.message="服务器错误!"
                  break;
              case 501:
                  error.message="网络未实现!"
                  break;
              case 502:
                  error.message="网络错误!"
                  break;
              case 503:
                  error.message="网络不可用!"
                  break;
              case 504:
                  error.message="网络超时!"
                  break;
              case 505:
                  error.message="http版本不支持请求!"
                  break;
          }
      }else {
          error.message="网络出现问题,请稍后再试!"
      }

  // 对响应错误做点什么
  Store.commit("hideLoading");
  return Promise.reject(error);
 })
```


移动端适配(rem)

1.新建fontSize.js

---assets
   --common
     --js
       --fontSize.js    

2.原理:等比缩放

代码示例:

(function (doc, win) {
    var docEl = doc.documentElement,
        resizeEvt = \'orientationchange\' in window ? \'orientationchange\' : \'resize\',
        recalc = function () {
            var clientWidth = docEl.clientWidth;
            if (!clientWidth) return;
            if(clientWidth>=750){
                docEl.style.fontSize = \'100px\';
            }else{
                docEl.style.fontSize = 100 * (clientWidth / 750) + \'px\';
            }
        };

if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener(\'DOMContentLoaded\', recalc, false);

})(document, window);

​ <u>获取浏览器字体默认值,设置等比比例</u>

3.加载fontSize文件

<font color=\'orange\'>使用方式:将文件引入带main.js文件中即可</font>

UI框架引入

个人推荐使用vue开发的UI框架

1.移动端UI框架

VantUI:目前使用过最好用的框架

vant地址:https://youzan.github.io/vant/#/zh-CN/

2.PC端框架

iViewUI:iView 是一套基于 Vue.js 的开源 UI 组件库,主要服务于 PC 界面的中后台产品。

iView地址:https://iview.github.io/

以上是关于Vue搭建移动端WebApp的主要内容,如果未能解决你的问题,请参考以下文章

Vue 2.0开发企业级移动端音乐WebAPP

Vue 实现网易云音乐 WebApp

Vue 实现网易云音乐 WebApp

vue+express+mongodb搭建移动端网站

从零开始搭建搭建vue移动端项目

HTML5+Vue.js+Koa+zepto框架综合实战移动webAPP项目