vue开发小程序项目总结

最近全权负责一个小程序的前端开发工作,之前小程序使用原生技术开发过一版,当时由于进入项目组晚,且项目开发周期短,没有详细了解项目的各种情况,导致后期开发过程中出现各种各样的让人烦心的问题,开发过程很是吃力!经过此次,愈发觉得项目开发前的准备工作乃是项目开发必不可少的。好在,现在甲方允许公司对小程序进行二期优化,这才有了此次的经验总结。

项目前期准备工作

有了第一版的开发经验,对项目有了较深的了解,在此简单说明一下。

项目是一个APP小程序,APP是甲方请的第三方公司开发的一个类似微信的内部员工使用的通讯APP。由于此公司没有对其他项目组进行有关小程序开发的培训工作,只有一些API说明文档和一个内嵌小程序【插件应用】的demo。况且本人所在项目组也没有类似架构师的人来负责这个项目,后台开发人员配合上也是很不给力,只愿意干自己手中的工作,对不是自己负责的工作,很是不上心。总而言之,此项目开发困难重重。

APP小程序是以SSO模式为登录方式。APP提供两种方式获取token值:前端js获取和后端jdk获取。本人负责的APP小程序就是前端获取token值得方式进行开发。在此唠叨一下,直接提供一个API来获取token,对开发小程序不是很方便?这种获取token的方式,真是不常见!这让我在怎么解决获取token的问题上,很是费了些力气。

简单说明一下前端js获取的方式

APP提供一个函数获取toekn,function getSSOToken(“APPID”,function(sso_token) {// 这里写调用sso_token的方法})

项目采用vue框架进行开发,使用vue-axios进行合API请求,使用vuex进行状态管理,vant组件开发页面。总之,项目采用vue+axios+vuex+vant进行开发。

项目开发过程中遇到的问题

1、怎样在vue项目中获取token,并写入vuex中?

解决方法

针对这个小程序获取token的方式,本人采用自定义函数的方式。简单的说,在index.html中把第三方提供获取token的函数封装一下,暴露在window对象下。
// index.html 
var getToken = function(APP_ID, callback) {
  // 第三方提供的获取token的函数
  // 之后就可以在vue文件中使用window.getToken()方式调用
  MXCommon.getSSOToken(APP_ID, callback)
}

2、怎么解决vuex中的变量,在刷新页面之后被初始化【持久化vuex中的变量】?

解决方法

使用vuex-persist插件,此插件需要在项目打包时转译成ES5,否则在ios和低版本下会有兼容问题

import Vue from 'vue'
import Vuex from 'vuex'
import VuexPersistence from 'vuex-persist'
 
Vue.use(Vuex)
 
const store = new Vuex.Store<State>({
  state: {
    user: { name: 'Arnav' },
    navigation: { path: '/home' }
  },
  plugins: [new VuexPersistence().plugin]
})
 
export default store
// 转译此插件需要在vue.config.js配置文件中进行如此配置
// in your vue.config.js
module.exports = {
  /* ... other config ... */
  transpileDependencies: ['vuex-persist']
}

3、vant移动端样式自适应。

解决方法

此项目是基于vue-cli3+及vue2版本创建的。在项目根目录下新建postcss.config.js文件。键入以下代码。
//postcss.config.js
const path = require('path');
module.exports = ({ file }) => {
  const designWidth = file.dirname.includes(path.join('node_modules', 'vant')) ? 37.5 : 75.0;
  return {
    plugins: {
      autoprefixer: {
        browsers: ['Android >= 4.0', 'iOS >= 8'],
      },
      'postcss-pxtorem': {
        rootValue: designWidth,
        propList: ['*'],
      },
    },
  }
};

4、移动端调试工具。

解决方法

相信vconsole是很多小伙伴选择的移动端调式工具,当然初期开始时,本人也是选择的是。但是开发过程中发现vconsole有个短板,无法查看network。在此,本人推荐一个更为方便的移动端调试工具eruda。使用起来也方便,只要在index.html引用就行。
<script src="//cdn.bootcss.com/eruda/1.3.0/eruda.min.js"></script>
<script>eruda.init();</script>

5、使用数组map()方法循环【对象数组】会改变原数组。

相信很多小伙伴都跟我一开始都以为【map()方法不会改变原始数组】,其实这句话并不严谨,而应该是【当数组中元素是值类型,map()方法不会改变原数组;当数组是引用类型时,则是改变原始数组的】。如果你不想改变原始数组,可以深度复制原始数组,然后在使用map();也可以采用以下方法

// array: 原始数组;tempArray:新数组
let tempArray = array.map((item) => ({
  ...item,
  key: item.key,
  value: item.value,
}));

6、vue使用嵌套路由。

7、页面多列等高布局【flex布局】

8、vue小程序安卓、IOS浏览器兼容性。

9、vue-axios取消短时间内多次重复请求及切换路由取消上次pending请求。

//main.js
import axios from "axios";
let pending = []
let CancelToken = axios.CancelToken
let cancelPending = (config) => {
  pending.forEach((item, index) => {
    if (config) {
      if (item.UrlPath === config.url) {
        item.Cancel() // 取消请求
        pending.splice(index, 1) // 移除当前请求记录
      }
    } else {
      item.Cancel() // 取消请求
      pending.splice(index, 1) // 移除当前请求记录
    }
  })
}
axios.defaults.headers.post['Content-Type'] = 'application/json; charset=UTF-8'
axios.interceptors.request.use(config => {
  cancelPending(config)
  config.cancelToken = new CancelToken(res => {
    pending.push({ 'UrlPath': config.url, 'params': config.params, 'Cancel': res })
  })

  return config;
}, error => {
  return Promise.reject(error)
})


axios.interceptors.response.use(
  response => {
    cancelPending(response.config)
    return response
  }, error => {
    console.log(error)
    return Promise.reject(error)
  }
)

Vue.prototype.$http = axios;
axios.defaults.baseURL = '/api/'

原创文章,作者:ZERO,如若转载,请注明出处:https://www.edu24.cn/front-end/vue-applets.html

Like (0)
Donate 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
Previous 2020年11月22日
Next 2020年11月25日

相关推荐

  • typeof 和 instanceof的区别

    在前端开发过程中,typeof与instanceof是经常要用到的, 了解两者的区别是每一个合格前端工程师所要掌握的。 JavaScript中typeof和instanceof常用…

    2019年6月18日
    1.6K
  • 浏览器渲染机制

    为什么要了解浏览器渲染页面机制?主要是还是性能的优化。 了解浏览器如何进行加载,我们可以在引用外部样式文件、外部JS时,将它们放到合适的位置,是浏览器以最快的速度,将文件加载完毕。…

    2019年5月31日
    1.6K
  • 简单酷炫的hover效果,值得收藏

    在浏览B站的时候,发现一个简单酷炫的hover效果的制作视频。浏览完之后,发现其中包含的知识点蛮经典的,特此收藏。 HTMl结构布局很普通,就是简单的一个水平垂直方向居中的表单,代…

    2020年7月20日
    1.8K
  • 异步神器async-await

    async-await和Promise的关系 async-await是建立在promise机制之上 ,async-await是promise和generator的语法糖。增强了代码…

    2019年6月3日
    1.5K
  • HTTP三次握手与四次挥手详解

    前端工程师面试的时候,关于HTTP三次握手是最常被询问的一个知识点,往往很多人,都是知道其原理及过程,就是用话语表达不出来,正式一点,就是词不达意。今天浏览到一篇关于HTTP三次握…

    2019年12月6日
    1.6K
  • Webpack入门,打包第一个工程

    简介 Webpack是一个开源的JavaScript模块打包工具,其最核心的功能是解决模块之间的依赖,把各个模块按照特定的规则和顺序组织在一起,最终合并为一个JS文件(有时会多个)…

    2022年11月8日
    410
  • CSS布局之圣杯与双飞翼布局

    所谓圣杯布局和双飞翼布局其实解决的问题是相同的,都是解决左右两栏固定宽度,中间部分自适应,其中某部分内容比其他内容高的时候,保证三者元素等高。他俩的区别就是:圣杯用padding。…

    2019年6月18日
    1.8K
  • 前端开发工程师怎样独立调试前端项目?

    在前后端分离开发的大环境下,前端开发已经不仅仅局限于所谓的切图,写页面的工作,同时,也给前端开发定义了新的含义。有前后端分离项目开发的工程师,都知道,这样的项目开发起来有多么的方便…

    2020年8月31日
    1.5K
  • node环境下使用express框架连接MySQL数据库

    目前,越来越多的企业选择使用前后端分离模式新建项目,这样,使得开发工作越来越便捷。那么,作为前端开发,怎样能在后端开发没有完成之前,测试并运行前端项目呢。在这里,小编推荐使用exp…

    2020年8月26日
    1.7K
  • Angular与vue对比

    Vue.js 是开源的 JavaScript 框架,能够帮助开发者构建出美观的 Web 界面。当和其它网络工具配合使用时,Vue.js 的优秀功能会得到大大加强。如今,已有许多开发…

    2019年6月13日
    1.7K

发表回复

Please Login to Comment