使用mpvue开发github小程序总结
前言
最近有点闲,想起关注已久的mpvue
写小程序,所以稍微肝了半个多月写了个github
版的微信小程序,已上线。现在总结一下遇到的坑。
扫码体验、
项目地址、
https://github.com/cheesekun/wx-github
mina坑
scroll-view 高度
可滚动视图区域。
使用竖向滚动时,需要给
<scroll-view/>
一个固定高度,通过 WXSS 设置 height。
小程序提供的scroll-view
组件,想让他能滚动,就要给他提供一个固定的高度。
我们一般需求是,上一块区域固定,下一块区域可滚动,我的处理方法是,拿到机型的可视高度,减去上一块固定区域的高度,动态赋值scroll-view
最终高度。
// 以 search 页为例
// 滚动区域高度 = 总高度 - 搜索框高度 - tabs 高度
onLoad () {
wx.getSystemInfo({
success: (res) => {
this.height = res.windowHeight // 获取机型可视高度
}
})
let query = wx.createSelectorQuery()
// 选择id
query.select('#search').boundingClientRect()
query.exec(res => {
let searchH = res[0].height // 获取search框高度
this.height = this.height - searchH - this.tabsH
})
}
坑点:wx.createSelectorQuery()
获取不了display: none
的元素高度。
我的解决方法是:在trending
页获取到tabs
组件的高度,再存放到vuex
中,给search
页使用
生命周期(同一page携带不同参数)
当我们从一个页面①进入页面②时,我们一般在onLoad
进行初始数据的获取,
从页面②返回到页面①时,若两个页面是不同的page,如①为page/info,
②为page/repo,那没问题,①页面unOnLoad
,②页面onShow
。
但是若①为page/info?user=a,②为page/info?user=b,那gg了,从页面②返回到页面①,页面①的数据会变成页面②的数据
为了避免这种情况,我一开始使用onShow
代替onLoad
,也就是在onShow
的时候获取页面的初始数据。但是这个情况就有点可怕了,我们知道onShow
很多情况都会触发到,切换前后台,从一个页面返回到另一个,都会触发onShow
,这就导致会触发很多不必要的请求,而且用户体验极差。
可我很多需求就是类似从①为page/info?user=a到②为page/info?user=b,因此曲线救国想出用vuex
维护有相关需求页面的路由栈。
页面onLoad
的时候,推入query参数到栈中,onShow
时,若当前页面的参数和栈中最后一个元素相同,则不重新加载数据。当页面被销毁,则在onUnload
中把相应的页面栈推出。这样就可以避免很多无谓的onShow
请求。
onLoad () {
this.reset()
const options = getQuery()
user = options.login
// vuex
this.reposStack.push(options)
this.getRepos()
},
onShow () {
const options = getQuery()
// vuex
let reposStack = JSON.parse(JSON.stringify(this.reposStack))
let len = reposStack.length
let endStack = reposStack[len - 1]
if (JSON.stringify(endStack) === JSON.stringify(options)) {
return
}
this.reset()
user = options.login
this.getRepos()
},
onUnload () {
// vuex
this.reposStack.slice(0, -1)
}
mpvue坑
query参数
mpvue
可以通过 this.$root.$mp.query
在所有页面的组件内获取路径参数。
如果以mina
来说的话,我们是通过在生命周期onLoad(options)
,拿到options
上携带的路径参数,mpvue
提供了this.$root.$mp.query
,我们可以所有生命周期上使用。
但是我们知道,当我们从当前页返回到上一页时,上一页并不会执行onLoad()
,
假设当前页和上一页是同个page
,只是携带参数不同的话,此时回退到上一页,
上一页的this.$root.$mp.query
不会变成自己的query
,还是会变成当前页的query
举例:①page/info?a=1 => ②page/info?b=2
当我从②返回到①时,①的this.$root.$mp.query
会变成{b:2}
我猜mpvue
的this.$root.$mp.query
是通过onLoad(options)
获取到options
,再赋值。但是遇到小程序页面返回不会执行onLoad
为了避免麻烦,我直接使用了小程序的api getCurrentPages()
,获取路由栈中最后一个路由的参数
getCurrentPages()
函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。
/**
* 获取当前路径参数
* 不用mpvue提供的this.$root.$mp.query
* 因为其进入同一页面,参数不会变化
*/
export function getQuery () {
/* 获取当前路由栈数组 */
const pages = getCurrentPages()
const currentPage = pages[pages.length - 1]
const options = currentPage.options
return options
}
后记
前面几个问题是我初次使用mpvue
开发小程序遇到的最大的坑了吧。(好久没有写东西了,写得好烂。)不过确实使用mpvue
开发小程序,能组件化,支持npm
,比原生开发舒服很多。体验还是很好的。
小程序现在是真的太火了。感觉是个前端都要去玩一下。
再次推一下项目地址,有兴趣的朋友可以参考一下。
https://github.com/cheesekun/wx-github
来源:https://segmentfault.com/a/1190000015754744
使用mpvue开发github小程序总结的更多相关文章
- mpvue开发微信小程序,分享按钮报错:`Cannot read property 'apply' of null`
用mpvue开发微信小程序,分享按钮报错:Cannot read property 'apply' of null onShareAppMessage 是于微信小程序Pages的生命周期钩子,顾这个方 ...
- 使用mpvue开发微信小程序
更多内容请查看 我的新博客 地址 : 前言 16年小程序刚出来的时候,就准备花点时间去学学.无奈现实中手上项目太多,一个接着一个,而且也没有开发小程序的需求,所以就一拖再拖. 直到上周,终于有一个小程 ...
- 利用mpvue开发微信小程序
最近公司部门负责人提出需求需要开发一款微信小程序,由于本人之前是做前端开发的,对于小程序开发一窍不通,但是很多时候我们都是把不会做变成我会学.于是便在网上寻找小程序开发教程,相比于相生的小程序开发,本 ...
- mpvue开发微信小程序
前段时间,美团开源了mpvue这个项目,使得我们又多了一种用来开发小程序的框架选项.由于mpvue框架是完全基于Vue框架的(重写了其runtime和compiler),因此在用法上面是高度和Vue一 ...
- mpvue开发微信小程序之时间+日期选择器
最近在做微信小程序,技术栈为mpvue+iview weapp组件库. 因项目需求,要用到日期+时间选择器,iview组件库目前还未提供时间日期选择器的组件,小程序官方组件日期时间也是分开的,在简书上 ...
- mpvue 开发微信小程序搭建项目
首先 mpvue 是一款基于vue的框架,mpvue 修改了 Vue.js 的 runtime 和 compile 实现,可以运行在小程序的环境中. 第一步:安装 vue-cli vue-cli是vu ...
- mpvue开发微信小程序之picker
微信使用picker组件,bingchange 换成@change即可使用监听函数和方法 此处注意与微信多了一个mp的信息才能获取到选中的值. 获取当前日期+时间 function formatTim ...
- mpvue 应用 Vant Weapp框架开发微信小程序
今天在使用mpvue开发微信小程序的过程中需要实现一个底部上拉选择列表的功能,因为之前做过H5微信公众号的开发,使用的就是有赞的Vant-ui,所以第一时间就想到了有赞的Vant Weapp UI框架 ...
- 用Vue.js开发微信小程序:开源框架mpvue解析
前言 mpvue 是一款使用 Vue.js 开发微信小程序的前端框架.使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为 H5 和小程序提供了代码复用的能力.如果想将 H5 项目改造为小程 ...
随机推荐
- ElasticSearch入门介绍之安装部署(二)
散仙,在上篇文章对ElasticSearch整体入门作了个介绍,那么本篇我们来看下,如何安装,部署es,以及如何安装es的几个比较常用的插件. es的安装和部署,是非常简单方便的,至少这一点散仙在es ...
- [Bzoj3743][Coci2015] Kamp【换根Dp】
Online Judge:Bzoj3743 Label:换根Dp,维护最长/次长链 题目描述 一颗树n个点,n-1条边,经过每条边都要花费一定的时间,任意两个点都是联通的. 有K个人(分布在K个不同的 ...
- 7.Spring切入点的表达式和通知类型
1.切入点的表达式 表达式格式: execution([修饰符] 返回值类型 包名.类名.方法名(参数)) 其他的代替: <!-- 完全指定一个方法 --> <!-- <aop ...
- idea永久使用本地的maven设置
1.要想是永久的,就选择other settings
- 深入浅出 Java Concurrency (3): 原子操作 part 2[转]
在这一部分开始讨论数组原子操作和一些其他的原子操作. AtomicIntegerArray/AtomicLongArray/AtomicReferenceArray的API类似,选择有代表性的Atom ...
- oracle pl/sql远程连接过程
之前没用过oracle,现在公司用到就记录下安装过程吧.安装PL/SQL工具,安装oracle11G工具.打开PL/SQL 进行配置.
- 基于RBAC权限管理的后台管理系统
在摸爬滚打中渐渐理解了RBAC权限管理是个什么玩意. RBAC的基本概念: **RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,who.what.how构成了访问权限三元 ...
- 为什么要使用ul li布局网站导航条?使用ul li布局网站网页导航必要性
会布局的都知道网站导航条布局非常重要,可能一个导航条最终布局效果有时可以使用ul li列表标签布局,有时可以不用ul li布局,而是直接一个div盒子里直接放锚文本超链接的栏目名称,也能实现,看下图. ...
- 基于LSTM对西储大学轴承故障进行分析
这篇文章是小萌新对西储大学轴承故障进行分析,固定特征为故障直径为0.007,电机转速为1797,12k驱动端故障数据(Drive_End)即DE-time.故障类型y值:滚动体故障,内圈故障,3时,6 ...
- Django--多对多表的创建、contentType、ajax、ajax传输json数据格式、ajax传输文件数据、 自定义分页器
MTV与MVC(了解): MTV模型(Django用的就是MTV): M:模型层(models.py) T:templates C:views MVC模型: M:模型层(models.py) V:视图 ...