哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

作者 | End_less_,责编 | 夕颜

来源 | CSDN博客

头图 | CSDN 下载自视觉中国

出品 | CSDN(ID:CSDNnews)

前言

今天,我们来学习一下如何使用vue进行微信小程序的搭建,感受一下使用Vue做小程序的魔力。

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

生命周期

1. Vue的生命周期

什么是Vue生命周期?简单来说,Vue 实例从创建到销毁的过程,就是生命周期。从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、销毁等一系列过程,称之为 Vue 的生命周期。Vue生命周期的作用,在于它的生命周期中有多个事件钩子,让我们在控制整个Vue实例的过程时更容易形成好的逻辑。

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

2. 微信小程序页面生命周期

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

3. uni-app生命周期

1. 应用生命周期

当使用uni-app进行项目的创建的时候,会在入口文件App.vue中自动生成应用生命周期的大致结构:

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

2. 页面生命周期

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

具体内容可看官网文档 :uni-app 生命周期(https://uniapp.dcloud.io/frame?id=生命周期)

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

项目搭建

项目使用的编辑器:VSCode,微信开发者工具,node环境,vue环境…

1. 创建项目

使用命令行:

vue create -p dcloudio/uni-preset-vue projectName

其中 projectName是项目名称,可自定义。

由于使用的是scss样式,需要安装sass-loader插件

命令行:npm i sass-loader node-sass,如果一直下载不成功,建议使用淘宝镜像。

2. 在微信小程序开发工具导入项目

首先使用命令行:npm run dev:mp-weixin,运行项目

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

3. 使用VSCode进行项目编写

当第二步完成之后,将项目文件夹在VSCode中打开,即可进行项目的编写。

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

项目结构

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

关于Vue知识,你需要了解哪些?

具体可看博客 –> Vue Knowledge(https://blog.csdn.net/Ms_yjk/article/details/104748084)

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

关于此项目微信小程序开发,你必须知道的知识

1. 如何将数据挂载在全局?

1.使用Vue原型进行数据挂载

例如:

Vue.prototype.testData = \"test\"//输出onLoad{console.log(this.testData) //\"test\"}

2.getApp.globalData

var app = getApp;console.log(app.globalData.helloFromApp); // 调用全局变量app.test; // 调用全局方法

2. image中的mode属性

在实现微信小程序时,肯定会处理图片的一些事件,缩略图,原图,显示样式等等都是需要考虑的。

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

3. 如何模拟触屏事件?

大致思路:

  1. 给容器绑定两个触屏事件 touchstart 和 touchend

  2. 用户按下屏幕事件

    a. 记录用户按下屏幕的时间 Date.now 时间戳 返回 1970 -1-1 到现在的毫秒数

    b. 记录用户按下屏幕的坐标 x 和 y

  3. 用户离开屏幕事件

    1. 记录用户离开屏幕的时间 Date.noew

    2. 记录用户离开屏幕的坐标 x 和 y

    3. 根据两个时间 运算 判断 用户按下屏幕时长是否合法

    4. 根据两对坐标 判断距离是否合法 判断 滑动的方向

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

4. 微信小程序轮播图如何实现?

一些基础知识:

1. 自动轮播 autoplay

2. 指示器 indicator-dots

3. 衔接轮播 circular

4. swiper标签 默认的高度是150px

5. image标签默认的宽度320px => 基本样式中重置了100%

默认的高度240px

6. 要计算图片的宽度和高度的比例 图片的宽度/高度

7. 把图片的比例也写到swiper标签样式中去

8. swiper-item 默认宽高是继承父元素的100%

更多相关知识可以在官方文档中进行查看 scroll-view 微信开放文档

5. 如何在微信小程序中实现Promise请求?

众所周知,在微信小程序中,其原生语言是不支持promise请求的。同时,uni-app的请求不能够方便的添加 “请求中” 效果,并且其返回值是一个数组。

封装思路

1.基于原生的promise进行封装

创建request.js文件:

//ES6export default (params) => {

// 加载中 uni.showLoading({ title: \"Loading...\" })

return new Promise((resolve, reject) => { wx.request({ ...params, success (res) { resolve(res.data); }, fail (err) { reject(err) }, complete { uni.hideLoading } }) })}

2.将其挂载在Vue的原型上

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

3.通过this.request的方式进行请求

每次进行获取页面数据请求中,直接使用this.request进行请求数据,例如:

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

6. 如何下载文件到本地?

1.函数介绍

1. uni.downloadFile(OBJECT)

下载文件资源到本地,客户端直接发起一个 HTTP GET 请求,返回文件的本地临时路径。

在各个小程序平台运行时,网络相关的 API 在使用前需要配置域名白名单。

OBJECT 参数说明

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

注:文件的临时路径,在应用本次启动期间可以正常使用,如需持久保存,需在主动调用uni.saveFile,才能在应用下次启动时访问得到。

success 返回参数说明

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

注意:网络请求的超时时间可以统一在 manifest.json 中配置 networkTimeout。

2. uni.saveImageToPhotosAlbum(OBJECT)

保存图片到系统相册。

平台差异说明

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

OBJECT 参数说明

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

success 返回参数说明

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

注意

  1. 可以通过用户授权API来判断用户是否给应用授予相册的访问权限https://uniapp.dcloud.io/api/other/authorize

  2. H5没有API可触发保存到相册行为,下载图片时浏览器会询问图片存放地址。

具体的一些属性和方法可阅读官方文档 uni-app

2.如何实现?

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

项目实现中,本人遇到的bug和一些注意问题

页面不显示

查看pages.json是否添加了相关的页面以及配置。

关于flex布局,图片显示的问题

论坛发布过这个问题:uni-app创建微信小程序 flex布局问题(https://bbs.csdn.net/topics/396522643)

moment.js 中英文转换

报错信息:

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

但是在node_modules中可以找到文件:

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

解决方法

1.

import moment from \'moment\'moment.locale(\'zh-cn\')

2.

import moment from \'moment\'import \'moment/locale/zh-cn\'

3.

moment.locale(\'zh-cn\', { months: \'一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月\'.split(\'_\'), monthsShort: \'1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\'.split(\'_\'), weekdays: \'星期日_星期一_星期二_星期三_星期四_星期五_星期六\'.split(\'_\'), weekdaysShort: \'周日_周一_周二_周三_周四_周五_周六\'.split(\'_\'), weekdaysMin: \'日_一_二_三_四_五_六\'.split(\'_\'), longDateFormat: { LT: \'Ah点mm分\', LTS: \'Ah点m分s秒\', L: \'YYYY-MM-DD\', LL: \'YYYY年MMMD日\', LLL: \'YYYY年MMMD日Ah点mm分\', LLLL: \'YYYY年MMMD日ddddAh点mm分\', l: \'YYYY-MM-DD\', ll: \'YYYY年MMMD日\', lll: \'YYYY年MMMD日Ah点mm分\', llll: \'YYYY年MMMD日ddddAh点mm分\' }, meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, meridiemHour: function (h, meridiem) { let hour = h; if (hour === 12) { hour = 0; } if (meridiem === \'凌晨\' || meridiem === \'早上\' || meridiem === \'上午\') { return hour; } else if (meridiem === \'下午\' || meridiem === \'晚上\') { return hour 12; } else { // \'中午\' return hour >= 11 ? hour : hour 12; } }, meridiem: function (hour, minute, isLower) { const hm = hour * 100 minute; if (hm < 600) { return \'凌晨\'; } else if (hm < 900) { return \'早上\'; } else if (hm < 1130) { return \'上午\'; } else if (hm < 1230) { return \'中午\'; } else if (hm < 1800) { return \'下午\'; } else { return \'晚上\'; } }, calendar: { sameDay: function { return this.minutes === 0 ? \'[今天]Ah[点整]\' : \'[今天]LT\'; }, nextDay: function { return this.minutes === 0 ? \'[明天]Ah[点整]\' : \'[明天]LT\'; }, lastDay: function { return this.minutes === 0 ? \'[昨天]Ah[点整]\' : \'[昨天]LT\'; }, nextWeek: function { let startOfWeek, prefix; startOfWeek = moment.startOf(\'week\'); prefix = this.diff(startOfWeek, \'days\') >= 7 ? \'[下]\' : \'[本]\'; return this.minutes === 0 ? prefix \'dddAh点整\' : prefix \'dddAh点mm\'; }, lastWeek: function { let startOfWeek, prefix; startOfWeek = moment.startOf(\'week\'); prefix = this.unix < startOfWeek.unix ? \'[上]\' : \'[本]\'; return this.minutes === 0 ? prefix \'dddAh点整\' : prefix \'dddAh点mm\'; }, sameElse: \'LL\' }, ordinalParse: /d{1,2}(日|月|周)/, ordinal: function (number, period) { switch (period) { case \'d\': case \'D\': case \'DDD\': return number \'日\'; case \'M\': return number \'月\'; case \'w\': case \'W\': return number \'周\'; default: return number; } }, relativeTime: { future: \'%s内\', past: \'%s前\', s: \'几秒\', m: \'1 分钟\', mm: \'%d 分钟\', h: \'1 小时\', hh: \'%d 小时\', d: \'1 天\', dd: \'%d 天\', M: \'1 个月\', MM: \'%d 个月\', y: \'1 年\', yy: \'%d 年\' }, week: { // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 dow: 1, // Monday is the first day of the week. doy: 4 // The week that contains Jan 4th is the first week of the year. } });

4. 更新moment.js版本

npm add moment@2.24.0

亲测第三种,第四种方法有效。

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

总结

使用vue进行微信小程序的编写,写法也类似Vue框架开发Web网页一样,使用组件,mpvue会自动转化成源生代码适应于小程序。

优点:组件化,易于维护,可以重复使用,节省开发成本。

数据绑定,事件处理,Scoped局部样式,使用HTML标签构建页面。

这样最大化的保持和网页应用开发一致,减少了前端人员切换到小程序的学习理解成本,也为原先使用Vue开发的网页应用移植到小程序平台提供了降低迁移成本的可能。

数据方面更新更为简易,不需要使用原生的SetData方法。还有WebPack自动构建,熟悉Vue的人易于上手。

优化了很多小程序的不足点(不能使用npm,不能使用css预处理器,原生是callback语法等等)

缺点:slot问题

原文链接:

https://blog.csdn.net/ms_yjk/article/details/105921002

哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)哟,2020 年了,用 Vue 做一个自己的小程序吧!- 原力计划(vue制作小程序)

☞一文浓缩 60 年,程序员不可不知的开源秘史!

☞CSDN总部落户长沙,共建中国开发者产业中心城市!

☞AI 修复 100 年前晚清影像喜提热搜,有穿越内味儿了!

☞CycleGan人脸转为漫画脸,牛掰的知识又增加了!| 附代码

☞触发死锁怎么办?MySQL 的死锁系列:锁的类型以及加锁原理了解一下!

☞带血的战士| 吴忌寒传

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年5月1日 下午5:16
下一篇 2024年5月1日 下午5:27

相关推荐

  • 涉外项目管理

    涉外项目管理 随着全球化的发展,越来越多的企业开始跨国经营,涉外项目管理成为了项目管理中不可或缺的一部分。涉外项目管理涉及到不同国家、不同文化、不同语言、不同政策等方面的挑战,因此…

    科研百科 2024年5月24日
    97
  • eHR人力资源绩效软件,全套IT信息软件管现实现(ehr人力资源管理软件)

    一、专注HR与IT深度融合,引领跨界新专业精心管理‌‌和录制人力资源信息化管理,是接下来要做的事情,为全套IT人力资源绩效软什管理实现 咨询落地。 1、组织管理2、人事管理3、薪酬…

    科研百科 2022年11月2日
    169
  • 测绘项目安全管理系统

    测绘项目安全管理系统 随着测绘工作的不断增多,测绘项目安全问题也日益突出。测绘项目安全管理系统是一种有效的管理手段,可以有效地保障测绘项目的安全顺利进行。本文将介绍测绘项目安全管理…

    科研百科 5天前
    0
  • 盘龙区金实小学积极推进党组织领导的校长负责制为教育高质量发展赋能

    加强党支部建设,充分发挥党支部在学校的核心堡垒作用,是推动现代学校治理体系建设的关键。盘龙区金实小学推进党组织领导的校长负责制,把党的组织优势转化为与学校“人权、事权、财权”相适应…

    科研百科 2023年3月9日
    469
  • 广西科研管理系统

    广西科研管理系统 广西科研管理系统是广西大学图书馆为了加强科研管理而开发的一款软件系统,旨在提高科研效率,提升科研水平。该系统包括科研文献管理、实验管理、论文管理、课题管理等多个方…

    科研百科 2024年11月22日
    6
  • 航空研究所有哪些

    航空研究所有哪些 航空研究所是致力于航空科技研究和应用的机构,是推动航空事业发展的重要力量。在中国,有许多航空研究所,它们致力于航空领域的研究和创新,为航空事业的发展做出了重要贡献…

    科研百科 2024年11月10日
    0
  • 企业管理之质量管理体系(企业管理之质量管理体系有哪些)

    质量管理体系(Quality Management System,QMS)是指在质量方面指挥和控制组织的管理体系。质量管理体系是组织内部建立的、为实现质量目标所必需的、系统的质量管…

    科研百科 2024年2月7日
    98
  • 信息项目系统管理师

    信息项目系统管理师是一种非常重要的职业。他们负责管理信息技术项目,包括软件、硬件、网络和其他基础设施。这些信息项目系统管理师需要掌握许多技能,包括项目管理、技术管理、团队领导和资源…

    科研百科 2024年12月10日
    0
  • 比Excel好用!这2款表格制作应用,正在重新定义生产力

    买好了「随心飞」准备出门旅游,该如何制作诱人的攻略吸引朋友一同前往呢?用《Excel》或备忘录发旅行攻略?不仅不够美观,还不够酷。 看看 A 君是怎么用《vika 维格表》做的。 …

    科研百科 2022年10月15日
    120
  • 贵州科技项目管理系统

    贵州科技项目管理系统是一款功能强大、易于使用的软件,旨在帮助科技型企业高效地管理项目和预算。该系统的主要功能包括项目计划、预算管理、进度控制、风险管理、质量管理和成本控制等,能够帮…

    科研百科 3天前
    0