大家好,我是编程小6,很高兴遇见你,有问题可以及时留言哦。
// 全局安装 vue-cli
$ npm install --global vue-cli
// 创建一个基于 mpvue-quickstart 模板的新项目
$ vue init mpvue/mpvue-quickstart my-project
// 安装依赖
$ cd my-project
$ npm install
// 启动构建
$ npm run dev
小程序的生命周期过程总结
页面跳转和路由
微信小程序采用页面栈的形式来管理页面,小程序宿主环境限制了这个页面栈的最大层级为10层。现在页面栈数据为 [pageA,pageB,pageC],pageC在最顶上,也就是用户看到的界面。 * wx.navigateTo({url:'pageD'}) 推出一个pageD,此时页面栈[pageA, pageB, pageC, pageD] * wx.navigateBack() 退出当前页面栈的最顶上页面,此时页面栈变成 [ pageA, pageB, pageC ] * wx.redirectTo({ url:'pageE'}) 替换当前页变成pageE,此时页面栈变成 [ pageA, pageB, pageE ] * wx.switchTab({ url:'pageF'}) 切换到tab页面pageF,此时原来页面栈被清空 [ pageF ] * wx.reLaunch({ url:'pageH'}) 重启小程序并打开pageH,此时页面栈为 [ pageH ]。
路由方式 | 触发时机 | 路由前页面生命周期 | 路由后页面生命周期 |
---|---|---|---|
初始化 | 小程序打开的第一个页面 | 无 | onLoad, onShow |
打开新页面 调用 | API wx.navigateTo | onHide | onLoad, onShow |
页面重定向 调用 | API wx.redirectTo | onUnload | onLoad, onShow |
页面返回 调用 | API wx.navigateBack | onUnload | onShow |
Tab | 切换 调用 API wx.switchTab | 具体情况具体分析 | 具体情况具体分析 |
重启动 | 调用 API wx.reLaunch | onUnload | onLoad, onShow |
iOS 屏幕宽度适配问题 块级元素的标签,用100%来代替需要完全宽度750rpx的页面效果(使用 absolute 和 fixed 的标签除外),如果同时设置了标签的 padding 或 border,需更改 box-sizing 属性值为border-box;
iOS 中Date 不支持构造 YYYY-MM-dd 的数据格式 可替换成 YYYY/MM/dd
小程序页面未触发onUnload之前页面状态不会销毁 由于页面的生命周期onLoad在被销毁之前只会触发1次,因此页面中data()返回的数据在 onShow()、onHide()生命周期触发时,不会主动去做数据初始化。需要手动重制数据状态,或者在离开页面时使用wx.redirectTo来跳转页面达到触发onUnload()行为。
小程序 textarea、input 层级过高,导致填写内容穿透 原生组件的层级是最高的,所以页面中的其他组件无论设置 z-index 为多少,都无法覆盖在原生组件上。解决的办法就是当textarea输入完成时,将textarea隐藏,将输入内容显示在一个text文本框。当点击text输入框时,又将text隐藏,显示textarea,并将textarea的焦点选中继续输入内容。
小程序原声组件button无法去除默认的border样式 使用 button::after{ border:none } 就可以去除默认border。
小程序中不支持 ::placeholder 选择器 在input标签中加入 placeholder-class="place-holder" 然后定义这个类的.place-holder{ color:red; }
如何获取小程序在页面传递的参数 在所有页面的组件内可以通过 this.
mp.query 进行获取。
小程序 web-view 组件无法实现在Android上直接预览pdf文件 由于Android 和 ios 在web-view组件上的差异,解决方式是:使用wx.getSystemInfo()获取设备信息,ios系统直接使用web-view进行预览pdf文件;Android系统通过wx.downloadFile()下载文件、wx.openDocument()打开文件的操作模拟文件预览的效果。(以下代码已经对部分小程序API 进行promise化)
//首先在 utils.js 进行小程序API promise化
function wxPromisify(functionName, params) {
return new Promise((resolve, reject) => {
wx[functionName]({
...params,
success: res => resolve(res),
fail: res => reject(res)
});
});
}
function getSystemInfo(params={}){ //获取系统信息
return wxPromisify('getSystemInfo',params);
}
function downloadFile(params={}){ //下载文件
return wxPromisify('downloadFile',params);
}
function openDocument(params={}){ //打开文件
return wxPromisify('openDocument',params);
}
//小程序预览文件全兼容方法
showDocHandle(){
let docId = this.uuid;
let resultUrl = `${apiConfig.request.getPubFile}/${this.xxxPubUrl}`
wx.showLoading({title: '正在识别设备!'})
utils.getSystemInfo()
.then(res => {
if(res.system.indexOf('iOS') != -1){
wx.hideLoading();
this.show = true;
this.resultUrl = resultUrl;
}else{
this.show = false;
wx.showLoading({title: '正在缓存文件!'});
return utils.downloadFile({url: resultUrl});
}
})
.then(res => {
let tempFilePath = res.tempFilePath;
wx.hideLoading();
wx.showLoading({title: '正在打开文件!'})
return utils.openDocument({filePath: tempFilePath})
})
.catch(err => {
wx.hideLoading();
utils.showToast("缓存文件失败!")
})
.then(res => {
wx.hideLoading()
utils.showToast("文件打开成功!")
})
.catch(err => {
wx.hideLoading();
utils.showToast("打开文件失败!")
wx.navigateBack({delta:1})
})
}