uni-app-01

176 阅读5分钟

① 能够知道如何安装和配置 vant-weapp 组件库 参考 Vant 的官方文档 
② 能够知道如何使用 MobX 实现全局数据共享 安装包、创建 Store 、参考官方文档进行使用 ③ 能够知道如何对小程序的 API 进行 Promise 化 安装包、在 app.js 中进行配置
④能够知道如何实现自定义 tabBar 的效果 Vant 组件库 + 自定义组件 + 全局数据共享 
① 能够知道如何实现页面之间的导航跳转 声明式导航、编程式导航
② 能够知道如何实现下拉刷新效果 enablePullDownRefresh 、 onPullDownRefresh 
③ 能够知道如何实现上拉加载更多效果 onReachBottomDistance 、 onReachBottom 
④ 能够知道小程序中常用的生命周期函数 应用生命周期函数: onLaunch , onShow , onHide 页面生命周期函数: onLoad , onShow , onReady , onHide , onUnloa
① 能够创建并引用组件:   全局引用、局部引用、 usingComponents 
② 能够知道如何修改组件的样式隔离选项:
options -> styleIsolation ( isolated , apply-shared , shared ) 
③ 能够知道如何定义和使用数据监听器:     observers
④ 能够知道如何定义和使用纯数据字段:    options -> pureDataPattern 
⑤ 能够知道实现组件父子通信有哪3种方式:
属性绑定、事件绑定、 this.selectComponent (' id 或 class 选择器')
⑥ 能够知道如何定义和使用 behaviors: 
调用 Behavior () 构造器方法

跨段兼容

在跨端的同时,通过条件编译+平台特有API调用,可以优雅的为某平台写个性化代码,调用专有能力而不影响其他平台。

条件编译

  • #ifdef:if defined 仅在某平台存在

  • #ifndef:if not defined 除了某平台均存在

  • %PLATFORM%:平台名称

  • 条件编译是利用注释实现的,在不同语法里注释写法不一样,js使用 // 注释、css 使用 /* 注释 */、vue/nvue 模板里使用 <!-- 注释 -->

支付流程

 调用 uni.requestPayment()发起支付

单例模式 

登录流程

第三方SDK  腾讯云TIM即时通讯

小程序API 

时间监听API 以on开头, 监听某些事件触发 wx.onWindowResize 监听窗口尺寸变化

同步API 以Sync结尾, 可以通过函数返回值直接获取, 执行出错会抛异常 , wx.setStorageSync 向本地存储中读写内容

异步API 请求函数, 通过success, fail, complete, wx.request发起网络数据请求, 通过success回调函数接收数据

编程式导航, 声明式导航

导航传参

url地址中携带查询参数, 在onLoad()事件中, 通过options 形参接收

修改数据this.setData({})

下拉刷新,上拉加载更多

组件生命周期

页面生命周期

onLoad

监听页面加载,

onShow

监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面

onReady

监听页面初次渲染完成。

onHide

监听页面隐藏

onResize

监听窗口尺寸变化

onPullDownRefresh

监听用户下拉动作,一般用于下拉刷新,

onReachBottom

页面滚动到底部的事件

onShareTimeline

监听用户点击右上角转发到朋友圈

应用生命周期

onLaunch

uni-app 初始化完成时触发(全局只触发一次)

onShow

uni-app 启动,或从后台进入前台显示

onHide

uni-app 从前台进入后台

onError

uni-app 报错时触发

onUniNViewMessage

nvue 页面发送的数据进行监听,可参考 [nvue 向 vue 通讯

](uniapp.dcloud.io/tutorial/nv…)

onUnhandledRejection

对未处理的 Promise 拒绝事件监听函数(2.8.1+)

onPageNotFound

页面不存在监听函数

onThemeChange

监听系统主题变化

自定义组件

局部注册,   全局注册

组件样式隔离  尽量使用 class 选择器,  不要使用 id , 属性 ,标签属性

options配置

正则表达式, 指定所有_开头的数据字段为      pureDataPattern: /^_/,    

纯数据字段 : 不用于界面渲染的data字段, 既不会展示到界面,也不会传递给其他组件  , 有助于提升页面更新的性能

在组件定义时的选项中启用多 slot支持     multipleSlots:true

组件插槽

组件通信 ,  小程序组件中 properties 用来接收外界传递到组件中的数据  bind:自定义事件名

获取组件实例 , const child = this.selectComponent('id') 或者类名

自定义组件,  behaviors 用于实现组件间代码共享, 可以包含一组属性,数据,生命周期函数, 和方法, 租金引用它时, 它的属性, 数据和方法都会合并到组件中

module.exports = Behavior({
    // 属性节点  properties:{},
    // 私有数据  data:{
        beNumber:12,
        obj:{name:'Behavior1'}
    }, 
    methods:{ 
       addbeNumber(){
            this.setData({
                beNumber:this.data.beNumber +1
            })
        }
    },
    lifetimes:{}
})

const myBehavior = require('../../behaviors/my-behaviors')
Component({
    behaviors:[myBehavior],
  })

同名字段的覆盖和组合规则 : 组件和它引用的bahaviors 可以包含同名字段,  对象会进行合并,

组件 > 父behaviors > 子 behaviors

组件中的数据    data是更倾向于存储组件的私有数据,  properties更倾向存储外界传递到组件中的数据,  他们都是可读可写的 ,指向同一个对象, 都可以用于页面渲染,  通过 this.setData({})为属性重新赋值

组件数据监听器  observers:  // 监听对象的属性, 1.直接为对象赋值, 2. 为属性赋值   // 通配符方式, 监听对象中所有属性的变化

组件的生命周期   lifetimes 字段内声明,  推荐的方式, 优先级最高 ,  新方式会覆盖旧方式

组件所在页面的生命周期   pageLifetimes 可以在组件内监听页面的事件

WX脚本

wxs 有自己的数据类型 number 数值类型、 string 字符串类型、 boolean 布尔类型、 object 对象类型、 function 函数类型、 array 数组类型、 date 日期类型、 regexp 正则 

② wxs 不支持类似于 ES6 及以上的语法形式 不支持: let 、 const 、解构赋值、展开运算符、箭头函数、对象属性简写、etc... 支持: var 定义变量、普通 function 函数等类似于 ES5 的语法 

③ wxs 遵循 CommonJS 规范 module 对象 require() 函数 module.exports 对象

wxs 典型的应用场景就是“过滤器”,经常配合 Mustache 语法进行使用,在 wxs 中定义的函数不能作为组件的事件回调函数。

隔离性: ① wxs 不能调用 js 中定义的函数 ② wxs 不能调用小程序提供的 API

性能: 在 iOS 设备上,小程序内的 WXS 会比 JavaScript 代码快 2 ~ 20 倍 在 Android 设备上,二者的运行效率无差异 

1. 内嵌 wxs 脚本
<view>{{ m1.toUpper(username) }}</view>
<wxs module="m1">
module.exports.toUpper = function(str) {
return str.toUpperCase()
} 
</wxs>
2.外联的 wxs 脚本
function toLower(str) {
return str.toLowerCase()
}
// 2.暴露成员
module.exports = {
toLower: toLower
}
!-- 1.使用外联式引入外部的wxs文件 -->
<wxs module="m2" src="../../utils/tools.wxs">
<view>{{ m2.toLower(country) }}