前端uni-app框架简介(二)

应用生命周期

 

函数名 说明
onLaunch uni-app 初始化完成时触发(全局只触发一次)
onShow 当 uni-app 启动,或从后台进入前台显示
onHide 当 uni-app 从前台进入后台
onError 当 uni-app 报错时触发
onUniNViewMessage 对 nvue 页面发送的数据进行监听,可参考 nvue 向 vue 通讯

注意

  • 应用生命周期仅可在App.vue中监听,在其它页面监听无效。

页面生命周期

大可能性会用到的onLoad、onShow、 onReady、 onHide、 onPullDownRefresh、 onReachBottom、
onTabltemTap、onShareAppMessage、 onPageScroll 

函数名 说明 平台差异说明 最低版本
onLoad 监听页面加载,其参数为上个页面传递的数据,参数类型为Object(用于页面传参),参考示例    
onShow 监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面    
onReady 监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发    
onHide 监听页面隐藏    
onUnload 监听页面卸载    
onResize 监听窗口尺寸变化 App、微信小程序  
onPullDownRefresh 监听用户下拉动作,一般用于下拉刷新,参考示例    
onReachBottom 页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据。具体见下方注意事项    
onTabItemTap 点击 tab 时触发,参数为Object,具体见下方注意事项 微信小程序、支付宝小程序、百度小程序、H5、App(自定义组件模式)  
onShareAppMessage 用户点击右上角分享 微信小程序、百度小程序、字节跳动小程序、支付宝小程序  
onPageScroll 监听页面滚动,参数为Object nvue暂不支持

注意点 —— onLaunch只能在App.vue里写


组件生命周期

uni-app组件支持的生命周期,与vue标准组件的生命周期相同。

这里没有页面级的onLoad等生命周期。


路由

注意点:初学可能会遇到的问题,新建一个页面, 访问不到,因为没有配对pages.json文件, 需要用到的页面一定要在pages.json里配, 第一个配置项就是启动页。pages.json能加tabbar,如果不需要他的tabbar,就需要自己自定义一个tabbar组件。

pages.json所有配置选项:

pages为路由

condition为启动模式配置仅开发期间生效,用于模拟直达页面的场景,如:小程序转发后,用户点击所打开的页面;

globalStyle用于设置应用的状态栏、导航条、标题、窗口背景色等

tabBar: tabBar 配置项指定 tab 栏的表现

easycom传统vue组件,需要安装、引用、注册,三个步骤后才能使用组件。easycom将其精简为一步。 只要组件安装在项目的components目录下,并符合components/组件名称/组件名称.vue目录结构。就可以不用引用、注册,直接在页面中使用

{
    "pages": [{
        "path": "pages/component/index",
        "style": {
            "navigationBarTitleText": "组件"
        }
    }, {
        "path": "pages/API/index",
        "style": {
            "navigationBarTitleText": "接口"
        }
    }, {
        "path": "pages/component/view/index",
        "style": {
            "navigationBarTitleText": "view"
        }
    }],
    "condition": { //模式配置,仅开发期间生效
        "current": 0, //当前激活的模式(list 的索引项)
        "list": [{
            "name": "test", //模式名称
            "path": "pages/component/view/index" //启动页面,必选
        }]
    },
    "globalStyle": {
        "navigationBarTextStyle": "black",
        "navigationBarTitleText": "演示",
        "navigationBarBackgroundColor": "#F8F8F8",
        "backgroundColor": "#F8F8F8",
        "usingComponents":{
            "collapse-tree-item":"/components/collapse-tree-item"
        },
        "renderingMode": "seperated", // 仅微信小程序,webrtc 无法正常时尝试强制关闭同层渲染
        "pageOrientation": "portrait"//横屏配置,全局屏幕旋转设置(仅 APP/微信/QQ小程序),支持 auto / portrait / landscape
    },
    "tabBar": {
        "color": "#7A7E83",
        "selectedColor": "#3cc51f",
        "borderStyle": "black",
        "backgroundColor": "#ffffff",
        "height": "50px",
        "fontSize": "10px",
        "iconWidth": "24px",
        "spacing": "3px",
        "list": [{
            "pagePath": "pages/component/index",
            "iconPath": "static/image/icon_component.png",
            "selectedIconPath": "static/image/icon_component_HL.png",
            "text": "组件"
        }, {
            "pagePath": "pages/API/index",
            "iconPath": "static/image/icon_API.png",
            "selectedIconPath": "static/image/icon_API_HL.png",
            "text": "接口"
        }],
        "midButton": {
            "width": "80px",
            "height": "50px",
            "text": "文字",
            "iconPath": "static/image/midButton_iconPath.png",
            "iconWidth": "24px",
            "backgroundImage": "static/image/midButton_backgroundImage.png"
        }
    },
  "easycom": {
    "autoscan": true, //是否自动扫描组件
    "custom": {//自定义扫描规则
      "uni-(.*)": "@/components/uni-$1.vue"
    }
  }
}

路由跳转

uni.navigateTo(OBJECT)

保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面。

//在起始页面跳转到test.vue页面并传递参数
uni.navigateTo({
    url: 'test?id=1&name=uniapp'
});
// 在test.vue页面接受参数
export default {
    onLoad: function (option) { //option为object类型,会序列化上个页面传递的参数
        console.log(option.id); //打印出上个页面传递的参数。
        console.log(option.name); //打印出上个页面传递的参数。
    }
}

uni.redirectTo(OBJECT)

关闭当前页面,跳转到应用内的某个页面。

uni.redirectTo({
    url: 'test?id=1'
});

 

uni.reLaunch(OBJECT)

关闭所有页面,打开到应用内的某个页面。

uni.reLaunch({
    url: 'test?id=1'
});
export default {
    onLoad: function (option) {
        console.log(option.id);
    }
}

 

uni.switchTab(OBJECT)

跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。

pages.json:

{
  "tabBar": {
    "list": [{
      "pagePath": "pages/index/index",
      "text": "首页"
    },{
      "pagePath": "pages/other/other",
      "text": "其他"
    }]
  }
}

other.vue

uni.switchTab({
    url: '/pages/index/index'
});

 

uni.navigateBack(OBJECT)

关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层。

// 注意:调用 navigateTo 跳转时,调用该方法的页面会被加入堆栈,而 redirectTo 方法则不会。见下方示例代码

// 此处是A页面
uni.navigateTo({
    url: 'B?id=1'
});

// 此处是B页面
uni.navigateTo({
    url: 'C?id=1'
});

// 在C页面内 navigateBack,将返回A页面
uni.navigateBack({
    delta: 2
});

 

运行环境判断:

这个和vue差不多的, 可以用来区分环境,你本地运行会用开发环境,打包会自动用生产环境


页面样式与布局

uni-app内有个自己提供的动态单位upx,宽度定死750个upx,这样就可以用类似百分比的方式设置宽高了; vh是视窗高度百分比

动态修改upx需要使用uni.upx2px函数,否则无法生效

Flex布局是真的好用,学会了这个感觉至少静态布局上都没什么难度了,uni-app也推荐使用这种布局

推荐学习flex网址:https://blog.csdn.net/Allenyhy/article/details/81605547

支持npm安装第三方包

小程序组件支持——有一定规范,需要自定义写对应组件的要看看这个

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章