第一次运行到小程序:
1再HBuilder中设置微信小程序的路径,
2在微信小程序中打开安全-》设置-》端口
项目目录:unpackages:打包的文件
packages.json:页面配置
manifest.json:打包配置
生命周期函数:
应用生命周期:定义在app.vue中
onLaunch:当app初始化完成时触发(全局只触发一次);
onShow: 当app显示时,触发;(浏览器从最小化切换到最大化,切换页签时)
onHide:当app隐藏时,触发;(浏览器从最大化切换到最小化,切换页签时)
onError:当app报错时,触发
页面生命周期:
onload:监听页面加载,参数为上个页面传递的参数
onShow:监听页面显示,
onReady:监听页面初次渲染完成
onHide:监听页面隐藏
onUnload:监听页面卸载
onPullDownRefresh :监听用户的下拉动作,一般用于下拉刷新
uni.startPullDownRefresh();可以通过按钮来开始下拉刷新,会触发onPullDownRefresh()中的方法
uni.stopPullDownRefresh();停止下拉刷新
onReachBottom:页面滚动到底部的事件,(下拉加载数据)
网络请求:
uni.request({
url: 'https://www.example.com/request', //仅为示例,并非真实接口地址。
data: {
text: 'uni.request'
},
methods: "POST",//默认为GET
header: {
'custom-header': 'hello' //自定义请求头信息
},
success: (res) => {
console.log(res.data);
}
});
注意
对于 GET 方法,会将数据转换为 query string。例如 { name: 'name', age: 18 } 转换后的结果是 name=name&age=18。
对于 POST 方法且 header['content-type'] 为 application/json 的数据,会进行 JSON 序列化。
对于 POST 方法且 header['content-type'] 为 application/x-www-form-urlencoded 的数据,会将数据转换为 query string。
数据缓存:
设置:uni.setStorageSync("userMsg",JSON.stringify(this.apiValue));
获取:let res = uni.getStorageSync("userMsg"); console.log(JSON.parse(res));
移除:uni.removeStorageSync("userMsg");
文件上传:
uni.chooseImage({
count: 3, //上传的数量限制,默认为9 h5不生效
success: (chooseImageRes) => {
console.log(chooseImageRes)
this.imgList = chooseImageRes.tempFilePaths; //获取页面所展示的图片集合
uni.uploadFile({
url: 'http://39.98.225.237:9119/bcs/userInfo/updateUserInfo', //仅为示例,非真实的接口地址
//filePath: tempFilePaths[0],
//name: 'file',
formData: {
token: "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJsZjA5MjMiLCJhdWRpZW5jZSI6IndlYiIsImNyZWF0ZWQiOjE2MDQzODIxMDYxNjgsImF1dGhUb2tlbiI6InR0c2Y6dG9rZW46cGM6MjU2OmRlZjY3MTg2LTkxNjUtNDk5OC1iOTU2LTJlZWFjZGU0ZjVmMiIsImNvbXBhbnkiOjI1NiwiZXhwIjoxNjA0NDY4NTA2LCJ1c2VySWQiOjM2MX0.R85s0MmEd6Qt9DdpkPwtlNvfvaNt5_79-g3XydT5I9uOUTLrCnSxnCTJnoNuetvIx7YBHEaCMJC9FOH5jQdQXw",
id: 361,
company_id: 256,
depart_id: 230,
create_user_id: 352,
user_name: "lf0923",
user_nike_name: "梁飞",
user_sex: 1,
user_phone: 13612345675,
user_email: "213465987465123@qq.com",
//这里会有一个默认的参数 file 就是chooseImageRes.tempFiles[0] 这个参数就是向后端传递的参数
multfile:chooseImageRes.tempFiles[0] //向后端传递的参数
},
success: (uploadFileRes) => {
console.log(“接口返回数据”, uploadFileRes.data);
}
});
}
})
图片预览:
uni.previewImage({
current:item,//当前显示的图片
urls: this.imgList,//图片列表 左右滑动的,
indicator:"number",//图片指示器样式,可取值:"default" - 底部圆点指示器; "number" - 顶部数字指示器; "none" - 不显示指示器。 仅在安卓ios上生效
loop:true,//是否可循环预览,默认值为 false 仅在安卓ios上生效
longPressActions: {
itemList: ['发送给朋友', '保存图片', '收藏'],
success: function(data) {
console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片');
},
fail: function(err) {
console.log(err.errMsg);
}
}
});
条件编译:
<!-- #ifdef H5 -->
<view>
<text>只在H5展示</text>
</view>
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
<view>
<text>只在微信小程序中展示</text>
</view>
<!-- #endif -->
注:script中同样支持 只不过是 // #ifdef H5 //#endif
style中同样支持 只不过是 /* #ifdef H5*/ /*#endif */
路由跳转:
<!-- 声明式导航 -->
<navigator url="../detail/index?id=20&name=wangqi">跳转至详情页面</navigator>
<navigator url="../detail/index" open-type="redirect">open-type为redirect无返回按钮(将之前页面销毁了)</navigator>
<navigator url="../my/index" open-type="switchTab">跳转tabbar页面需要设置 open-type</navigator>
<!-- 编程式导航 -->
//不卸载之前页面
uni.navigateTo({
url:"../detail/index?name=xiaowang&age=100"
})
//跳转至tabbar页面
uni.switchTab({
url:"../my/index"
})
//卸载之前页面
uni.redirectTo({
url:"../detail/index"
})
接收路由参数:在onload(data){}这个生命周期中,有一个默认的参数,这个默认的参数就是路由传递的值,为一个对象
组件:引入方式同vue,生命周期同vue created,monted等等
传值:子传父,父传子,同vue,非父子 uni.$emit; uni.$on
插件:去插件市场下载
HBuilderX 2.5.5起,只需将本组件导入项目,在页面template中即可直接使用,无需在页面中import和注册componets。
api请求封装
建立一个公共的js文件
const BASE_URL = "http://39.98.225.237:9119";
//公共接口
export const myRequestApi = (parm) => {
return new Promise((resolve, reject) => {
let contentType = "";
if (parm.method == "POST") {
if (parm.contentType == 1) {
contentType = "application/x-www-form-urlencoded"
} else if (parm.contentType == 2) {
contentType = "application/json"
} else {
contentType = ""
}
}
uni.request({
url: BASE_URL + parm.url,
method: parm.method,
header: {
'content-type': contentType //自定义请求头信息
},
data: parm.data || {},
success: (res) => {
if(!res){
resolve()
}
if (res.data.code == 200) {
resolve(res.data)
} else {
return uni.showToast({
title: res.data.message,
icon:'none',
duration: 2000
})
}
},
fail: (err) => {
return uni.showToast({
title: res.data.message,
icon:'none',
duration: 2000
})
resolve(err)
}
})
})
}
//文件上传 平台上传图片返回结果是字符串
建立一个公共的js文件
export const myRequestFile = (parm) => {
return new Promise((resolve, reject) => {
uni.uploadFile({
url: BASE_URL + parm.url,
formData: parm.data || {},
success: (res) => {
let temp = JSON.parse(res.data);
if(!res){
resolve()
}
if (temp.code == 200) {
resolve(temp)
} else {
return uni.showToast({
title: temp.message,
icon:'none',
duration: 2000
})
}
},
fail: (err) => {
let temp = JSON.parse(res.data);
return uni.showToast({
title: temp.message,
icon:'none',
duration: 2000
})
resolve(err)
}
})
})
}
然后再main.js中引入
import {
myRequestApi,
myRequestFile
} from "./static/js/api.js"
再
Vue.prototype.$myRequestApi = myRequestApi;
Vue.prototype.$myRequestFile = myRequestFile;
页面中在methods中使用
async getData() {
let res = await this.$myRequestApi({
url: "/bcs/userInfo/selectComAndDeptById",
method: "POST",
contentType: 1,
data: {
token: "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJsZjA5MjMiLCJhdWRpZW5jZSI6IndlYiIsImNyZWF0ZWQiOjE2MDQ0NjE0MTAzNjMsImF1dGhUb2tlbiI6InR0c2Y6dG9rZW46cGM6MjU2OjEwMWI3NTc0LTJmNDEtNGFjYS1hZjVjLWE1MzFkZjQ4MmRkMyIsImNvbXBhbnkiOjI1NiwiZXhwIjoxNjA0NTQ3ODEwLCJ1c2VySWQiOjM2MX0.CsbFgOcSb1bM2VrcN-7lG4qaMOR1IkvRarbGSYx6dVTGpzavAq1odNmjvZu6HlXBEbW2L14sntXqXe2M7awecw",
id: 360
}
})
if (res) {
this.apiValue = res.data;
uni.showToast({
title: "请求成功",
icon: 'success',
duration: 2000
})
}
},
打包:
微信小程序:
在manifest.json文件中:微信小程序配置--》appId(微信公众平台,开发,开发设置中)-》发布
在微信公众平台上 点击版本管理 -》提交审核
H5网页版本:设置完默认应用名称后;运行h5打包就行了