uniapp

第一次运行到小程序:
    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打包就行了

 

posted @ 2021-02-24 15:42  我是一名好程序员  阅读(334)  评论(0编辑  收藏  举报