关于javascript:Vue搭建移动端WebApp

8次阅读

共计 4111 个字符,预计需要花费 11 分钟才能阅读完成。

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/

正文完
 0