小程序页面结构
WXML(WeiXin Markup Language)是框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的结构。内部主要是微信自己定义的一套组件
WXSS (WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式
js 逻辑处理,网络请求
json 小程序设置,如页面注册,页面标题及tabBar
注意:app前缀的文件 没有app.wxml
小程序与Vue 双向数据绑定的异同
大体相同,但小程序直接this.data的属性是不可以同步到视图的,必须调用this.setData()方法!
1.双向绑定:vue默认支持双向绑定,微信小程序需要借助data。
2.取值:vue中,通过this.reason取值。小程序中,通过this.data.reason取值。
3.定义方法:小程序使用 在app.js中定义即可,vue的方法通过写在method中进行定义。
- 去变量的时候:
- 小程序 wx:for = "lists"
- Vue是 v-for = "item in lists"
- 调用data模型(赋值)的时候:
- 小程序:this.data.item //调用 this.setData({item:1}) //赋值
- vue: this.item //调用 this.item =1 //赋值
小程序的双向绑定实际上并不是双向绑定 如果在小程序.js文件中改变了某个变量的值 那么页面上的值并不会跟着改变 如果想要页面上的值也跟着改变的话 需要通过setData来操作 而Vue默认就是双向绑定 只改变了某个变量的值 页面上也会跟着改变
小程序的wxml与html的异同
都是用来描述页面的结构;
都由标签、属性等构成;
标签名字不一样,且小程序标签更少,单一标签更多;
多了一些 wx:if 这样的属性以及 {{ }} 这样的表达式
WXML仅能在微信小程序开发者工具中预览,而HTML可以在浏览器内预览
组件封装不同, WXML对组件进行了重新封装,
小程序运行在JS Core内,没有DOM树和window对象,小程序中无法使用window对象和document对象。
小程序的wxss与css的异同
都是用来描述页面的样子;
WXSS 具有 CSS 大部分的特性,也做了一些扩充和修改;
WXSS新增了尺寸单位,WXSS 在底层支持新的尺寸单位 rpx;
WXSS 仅支持部分 CSS 选择器;
WXSS 提供全局样式与局部样式
WXSS 不支持window和dom 文档流
小程序页面间有哪些传递数据的方法
1.使用全局变量实现数据传递
在 app.js 文件中定义全局变量 globalData, 将需要存储的信息存放在里面
// app.js
App({
// 全局变量
globalData: {
userInfo: null
}
})
使用的时候,直接使用 getApp() 拿到存储的信息
2.使用 wx.navigateTo 与 wx.redirectTo 的时候,可以将部分数据放在 url 里面,并在新页面 onLoad 的时候初始化
//pageA.js
// Navigate
wx.navigateTo({
url: '../pageD/pageD?name=raymond&gender=male',
})
// Redirect
wx.redirectTo({
url: '../pageD/pageD?name=raymond&gender=male',
})
// pageB.js
...
Page({
onLoad: function(option){
console.log(option.name + 'is' + option.gender)
this.setData({
option: option
})
}
})
需要注意的问题:
wx.navigateTo 和 wx.redirectTo 不允许跳转到 tab 所包含的页面
onLoad 只执行一次
3.使用本地缓存 Storage 相关
总结:
设置全局变量
设置自定义属性 data-
设置小程序标签的id属性
使用路由携带参数
使用本地存储
使用数据库
使用模板传值 (props)
小程序的生命周期函数
onLoad() 页面加载时触发,只会调用一次,可获取当前页面路径中的参数。
onShow() 页面显示/切入前台时触发,一般用来发送数据请求;
onReady() 页面初次渲染完成时触发, 只会调用一次,代表页面已可和视图层进行交互。
onHide() 页面隐藏/切入后台时触发, 如底部 tab 切换到其他页面或小程序切入后台等。
onUnload() 页面卸载时触发,如redirectTo或navigateBack到其他页面时。
onPullDownRefresh() 下拉刷新的钩子函数 用户下拉刷新时会自动走到这个函数中
onReachBottom() 上翻到底的钩子函数
微信小程序的优劣势
优势:
容易上手,基础组件库比较全,基本上不需要考虑兼容问题;
开发文档比较完善,开发社区比较活跃,支持插件式开发;
良好的用户体验:无需下载,通过搜索和扫一扫就可以打开,打开速度快,安卓上可以添加到桌面,与原生APP差不多;
开发成本比APP要低;
为用户提供良好的安全保障(小程序发布 严格的审查流程)
劣势:
限制较多,页面大小不能超过1M,不能打开超过5个层级的页面;
样式单一,部分组件已经是成型了的,样式不可修改,例如:幻灯片、导航
推广面窄,不能分享朋友圈,只能通过分享给朋友,附近小程序推广
依托于微信,无法开发后台管理功能
后台调试麻烦,因为api接口必须https请求且公网地址
真机测试,个别功能安卓和苹果表现迥异,例如安卓的定位功能加载很慢
bindtap和catchtap的区别是什么
bindtap是不会阻止冒泡事件的,catchtap是阻值冒泡的
简述下 wx.navigateTo(), wx.redirectTo(), wx.switchTab(), wx.navigateBack(), wx.reLaunch()的区别
1.wx.navigateTo():保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面
2.wx.redirectTo():关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面
3.wx.switchTab():跳转到 abBar 页面,并关闭其他所有非 tabBar 页面
4.wx.navigateBack()关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层
5.wx.reLaunch():关闭所有页面,打开到应用内的某个页面