赞
踩
前期概述:做了很长时间的小程序了,在此做一个完整的项目总结,希望可以帮助到正在学习、开发的小伙伴。此篇文章并不涉及一些原理,更重要的是帮助大家实现功能、流程。
uniapp 还是很强大的 可以开发 小程序、h5、pc、app等,总的来说他是一款跨平台的应用框架
一、创建项目及初始化步骤
(1)创建
(2)启动小程序
启动小程序 最好现在uniapp中配置一下小程序的appid 否则可能会出现启动不了的情况
步骤:
1.微信公众平台查看自己的小程序id 开发 → 开发管理 → 开发设置 → 找到appid
.在uniapp 中进行配置 目录下的manifest.json → 微信小程序配置 → 填写小程序appid
(3)目录结构
├── pages # 页面 (每个页面可以作为一个文件)
├── static # 静态资源 (图片、音视频)
├── unpackage # 打包文件
├── App.vue # 主文件(可以定义全局方法、样式、变量)
├── main.js # 入口 (引入插件)
├── pages.json # 页面路由
├── package.json # npm相关文件
└── uni.scss # 常用于定义全局样式变量、第三方ui库的样式(插件)
每次想要在pages里新加一个页面 都要在pages.json里配置一下
下面列举一些常用 style 配置项,一般情况下足以开发 更多:uni-app官网
2. App.vue
<script> export default { onLaunch: function() { console.log('App Launch') getApp().getName() }, onShow: function() { console.log('App Show') }, onHide: function() { console.log('App Hide') }, methods: { getName(){ console.log('我是奥特曼'); } }, globalData: { imageUrl: 'xxxx', platform: uni.getSystemInfoSync().platform }, } </script> <style> /*每个页面公共css */ .wh100 { width: 100%; height: 100%; } .flexC { display: flex; justify-content: center; align-items: center; } .flex { display: flex; } /*每个页面公共css */ </style>
一般常用在app.vue里面使用的 onLunch、globalData、style
1.onLunch 只会在进入程序的时候执行一次,一般搭配搭建或等获取微信公众号的code ,想要app.vue调取methods 的方法记得用 getApp.方法名( )
2.globalData:常用于定义一些公共的变量、例如图片路径资源、手机是否是ios 或 安卓。 使用 :现在js中引入 1. import app from ‘@/App.vue’ 2. platform: app.globalData.platform,
3.style 定义公共的全局样式 例如垂直水平居中、布局、公共类目样式都可以定义
(4)推荐ui库
uniapp: uView 2.0 - 全面兼容nvue的uni-app生态框架 - uni-app UI框架
如果 有功能不好去实现也可以去uniapp 的插件市场 DCloud 插件市场
原生小程序(扩展):Vant Weapp - 轻量、可靠的小程序 UI 组件库
(5) 页面生命周期
onLoad 接受参数
A页面
toB(){
uni.navigateTo({
url:'/pages/index/b?name=奥特曼'
})
}
B页面接受参数
onLoad(e) {
console.log(e.name);
}
(6) 组件生命周期
uni-app 组件支持的生命周期,与vue标准组件的生命周期相同。这里没有页面级的onLoad等生命周期 如果想要发送请求 可以在子组件的生命周期去执行
函数名 说明 平台差异说明
beforeCreate 在实例初始化之前被调用。详见(opens new window)
created 在实例创建完成后被立即调用。详见(opens new window)
beforeMount 在挂载开始之前被调用。详见(opens new window)
mounted 挂载到实例上去之后调用。详见 (opens new window)注意:此处并不能确定子组件被全部挂载,如果需要子组件完全挂载之后在执行操作可以使用$nextTickVue官方文档(opens new window)
beforeUpdate 数据更新时调用,发生在虚拟 DOM 打补丁之前。详见(opens new window) 仅H5平台支持
updated 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。详见(opens new window) 仅H5平台支持
beforeDestroy 实例销毁之前调用。在这一步,实例仍然完全可用。详见(opens new window)
destroyed Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。详见(opens new window)
(7)底部导航
官方文档:uni-app官网
"tabBar": { "color": "#8a8a8a", //tab 上的文字默认颜色 "selectedColor": "#B88DFF", //tab 上的文字选中时的颜色 "borderStyle": "white", // tabbar 上边框的颜色,可选值 black/white "backgroundColor": "#ffffff", //tab 的背景色 "list": [{ "pagePath": "pages/index", "text": "主页", "iconPath": "static/home.png", "selectedIconPath": "static/homeCurrent.png" }, { "pagePath": "pages/forum_index", "text": "逛逛", "iconPath": "static/map.png", "selectedIconPath": "static/mapCurrent.png" }, { "pagePath": "pages/shop_car", "text": "购物车", "iconPath": "static/shop.png", "selectedIconPath": "static/shopcurrent.png" }, { "pagePath": "pages/my", "text": "我的", "iconPath": "static/mine.png", "selectedIconPath": "static/mineCurrent.png" } ] },
如果想要实现自定义底部导航 可参考 UI库 解决自定义切换闪动 :微信小程序 自定义tabbar 防止闪动
(7)页面跳转
扩展 页面栈 getCurrentPages() 的使用
页面栈:常用于获取当前页面之前的页面的参数及修改之前页面的数据
首选在A页面做一个 navigateTo 的跳转到B页面 然后打印一下 页面栈
const pages = getCurrentPages()
console.log(pages);
如果想要拿上一页面的值 会采用 拿到上页的页面参数
const pages = getCurrentPages()
console.log(pages[pages.length-2]);
h5端 和 小程序的参数是有一些区别的 如果想要修改某个页面栈里的值 只需要 对象 点就可以直接修改了
prevPage.title = ‘hello World’ // h5 修改
prevPage.$vm.title=‘hello World’ // 小程序修改
使用场景 :购买商品时的地址切换(点击一项后 把上页的 地址替换掉)
(8)项目功能场景
除了调接口渲染列表 内容之外、剩下的可能就需要小程序提供的API 去实现一些功能、例如 微信授权登录、获取经纬度、设置位置信息、上传图片等。
登录
一般的授权登录流程 大概是
调用uni.login() 获取 code
通过code调取后端接口获取 sessionkey 和 openId
授权用户信息 获取后端需要的参数
调用登录接口 存储token
demo:
在小程序中也有像浏览器的locationstorage一样
uni.setStorageSync(‘token’,res.userinfo.token) // 存
uni.getStorageSync(‘token’) // 取
uni.removeStorageSync(‘token’) // 移除指定键
uni.clearStorageSync() // 清除所有缓存
2. 获取经纬度 getLocation
uni.getLocation({
type: 'wgs84',
success: function (res) {
console.log(res);
console.log('当前位置的经度:' + res.longitude);
console.log('当前位置的纬度:' + res.latitude);
},
fail:function(err){
console.log(err);
}
});
常用的使用上面代码就好了,如果获取失败可以继续优化一下想要的操作
如果后台要根据 经纬度算距离记得type 改成 gcj02
3.根据地图选择位置 chooseLocation
wx.chooseLocation({
success: (data) => {
console.log(data, '位置数据')
}
})
<map style="width: 100%;" class="topMap" :polyline="polyline" scale="4" latitude="25" longitude="120" :markers="covers"> </map> data() { return { title: 'Hello', polyline: [{ points: [{ longitude: 121.44577861, latitude: 37.48205260 }, { longitude: 121.44611657, latitude: 37.48207388 }, { longitude: 121.44725382, latitude: 37.48224841 }, { longitude: 121.44766152, latitude: 37.48237186 }, { longitude: 121.4475274100, latitude: 37.4827039000 }, { longitude: 121.44748986, latitude: 37.48299336 }, { longitude: 121.4476454300, latitude: 37.4831679000 }, { longitude: 121.4478063600, latitude: 37.4831381000 }, { longitude: 121.4479565600, latitude: 37.4831295800 }, { longitude: 121.4480263000, latitude: 37.4831636400 }, { longitude: 121.44820869, latitude: 37.48330837 }], color: "#ff0004dd", width: 3, // arrowIconPath: true, // dottedLine:true }], covers: [{ id: 1, longitude: 121.44820869, latitude: 37.48330837, width: 100, height: 45, }], } },
属性名 类型 默认值 说明 平台差异说明
longitude Number 中心经度
latitude Number 中心纬度
scale Number 16 缩放级别,取值范围为3-20 高德地图缩放比例与微信小程序不同
theme String normal 主题(satellite 或 normal)只在初始化时有效,不能动态变更(仅Android支持) 京东小程序
min-scale Number 3 最小缩放级别 App-nvue 3.1.0+、微信小程序2.13+
max-scale Number 20 最大缩放级别 App-nvue 3.1.0+、微信小程序2.13+
layer-style Number/String 1 个性化地图 App-nvue 3.1.0+、微信小程序2.13+
markers Array 标记点
polyline Array 路线 飞书小程序不支持
一般的使用场景 可能定位 现在的坐标,或者 做一些物流的路线
uni.chooseImage({
count: 6, //默认9
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album'], //从相册选择
success: function (res) {
console.log(JSON.stringify(res.tempFilePaths));
}
});
参数名 类型 必填 说明 平台差异说明
count Number 否 最多可以选择的图片张数,默认9 见下方说明
sizeType Array 否 original 原图,compressed 压缩图,默认二者都有 App、微信小程序、支付宝小程序、百度小程序
extension Array 否 根据文件拓展名过滤,每一项都不能是空字符串。默认不过滤。 H5(HBuilder X2.9.9+)
sourceType Array 否 album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项
crop Object 否 图像裁剪参数,设置后 sizeType 失效 App 3.1.19+
success Function 是 成功则返回图片的本地文件路径列表 tempFilePaths
fail Function 否 接口调用失败的回调函数 小程序、App
complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行)
一般 都是 通过选择图片后 拿到本地路径 再上传到服务器 获取 服务器链接图片
uniapp 上传文件 封装方法
let photoList = ['xx','xx']
uni.previewImage({
current: index,
urls: photoList
});
uni.requestPayment({
provider: 'wxpay',
timeStamp: res.payDetail.timeStamp,
nonceStr: res.payDetail.nonceStr,
package: res.payDetail.package,
signType: res.payDetail.signType,
paySign: res.payDetail.paySign,
success: function(res) {
console.log('支付成功')
},
fail: function(err) {
toa.toast('取消支付')
console.log('fail:' + JSON.stringify(err));
},
})
支付这点没什么太难的 直接调用wx的requestPayment 方法就好了 毕竟是在微信环境下 内部已经封装好啦
// 触底触发
onReachBottom() {
if(this.page >= this.lastPage) return
this.page=this.page+1
this.repairOrder()
},
上面的方法是 触底了 如果 当前页大于等于 最后一页 就return 停止执行 如果用scroll-view 请去官方文档看 scroll-view 的方法哈
8.弹窗
uni.showToast(OBJECT)
参数 类型 必填 说明 平台差异说明
title String 是 提示的内容,长度与 icon 取值有关。
icon String 否 图标,有效值详见下方说明。
image String 否 自定义图标的本地路径(app端暂不支持gif) App、H5、微信小程序、百度小程序
mask Boolean 否 是否显示透明蒙层,防止触摸穿透,默认:false App、微信小程序
duration Number 否 提示的延迟时间,单位毫秒,默认:1500
position String 否 纯文本轻提示显示位置,填写有效值后只有 title 属性生效, 有效值详见下方说明。 App
success Function 否 接口调用成功的回调函数
fail Function 否 接口调用失败的回调函数
complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行)
常用
uni.hideToast() 隐藏弹框
uni.hideToast();
uni.showLoading(OBJECT)
显示 loading 提示框, 需主动调用 uni.hideLoading 才能关闭提示框。
参数 类型 必填 说明 平台差异说明
title String 是 提示的文字内容,显示在loading的下方
mask Boolean 否 是否显示透明蒙层,防止触摸穿透,默认:false H5、App、微信小程序、百度小程序
success Function 否 接口调用成功的回调函数
fail Function 否 接口调用失败的回调函数
complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行)
(9)分享onShareAppMessage(OBJECT)
默认情况下是不允许分享的
需要添加两个方法
onShareAppMessage(){},
onShareTimeline(){}
默认清空下 分享的都是页面的默认配置项,如果想更改可以参考文档
参数名 类型 必填 说明 平台差异说明
title String 是 分享标题
path String 是 页面 path ,必须是以 / 开头的完整路径。注意:京东小程序,开头不要加’/’ QQ小程序不支持
imageUrl String 否 分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径。支持PNG及JPG。显示图片长宽比是 5:4
desc String 否 自定义分享描述 支付宝小程序、字节跳动小程序、京东小程序
bgImgUrl String 否 自定义分享二维码的背景图,建议大小750*950(网络图片路径) 支付宝小程序
(8)复用
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。