最近学习小程序,记录一下(2018.4.6)
目录结构 1.为了方便开发者减少配置项,描述页面的四个文件必须具有相同的路径与文件名。
配置
2.app.json文件用来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等
3.pages数组的第一项代表小程序的初始页面。小程序中新增/减少页面,都需要对 pages 数组进行修改。(在小程序工具里建好页面文件夹,然后再pages数组里配置好并保存,就可以自动生成页面文件)
4.navigationStyle 只在 app.json 中生效
5.tabBar 中的 list 是一个数组,只能配置最少2个、最多5个 tab,tab 按数组的顺序排序。
逻辑层 6.由于框架并非运行在浏览器中,所以 JavaScript 在 web 中一些能力都无法使用,如 document,window 等。 7.增加 getApp 和 getCurrentPages 方法,分别用来获取 App 实例和当前页面栈。通过 getApp() 获取实例之后,不要私自调用生命周期函数。
转发
8.现在通过调用 *wx.showShareMenu* 并且设置 *withShareTicket* 为 *true* ,当用户将小程序转发到任一群聊之后,可以获取到此次转发的 *shareTicket*,此转发卡片在群聊中被其他用户打开时,可以在App.onLaunch()* 或 App.onShow 获取到另一个 *shareTicket*。这两步获取到的 *shareTicket* 均可通过 wx.getShareInfo() 接口可以获取到相同的转发信息。*
9.只有转发到群聊中打开才可以获取到 shareTickets 返回值,单聊没有 shareTickets
注册程序 10.当小程序初始化完成时,会触发 onLaunch(全局只触发一次) 11.当用户点击左上角关闭,或者按了设备 Home 键离开微信,小程序并没有直接销毁,而是进入了后台; 当再次进入微信或再次打开小程序,又会从后台进入前台 12.只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。
场景值 13.由于Android系统限制,目前还无法获取到按 Home 键退出到桌面,然后从桌面再次进小程序的场景值,对于这种情况,会保留上一次的场景值。
页面栈 14.页面重定向:当前页面出栈,新页面入栈 页面返回:页面不断出栈,直到目标返回页,新页面入栈 Tab 切换:页面全部出栈,只留下新的 Tab 页面 重加载:页面全部出栈,只留下新的页面 15.getCurrentPages() 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。 16.不要尝试修改页面栈,会导致路由以及页面状态错误。 17.navigateTo, redirectTo 只能打开非 tabBar 页面。 switchTab 只能打开 tabBar 页面。 reLaunch 可以打开任意页面。 18.调用页面路由带的参数可以在目标页面的onLoad中获取。(路由带参可以形如 /pages/life/life?id=1 路径+‘?' + 参数)
事件
19.冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。
非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递
20.* key 以*bind*或*catch*开头,然后跟上事件的类型,如*bindtap*、*catchtouchstart*。自基础库版本 1.5.0 起,*bind*和*catch*后可以紧跟一个冒号,其含义不变,如*bind:tap*、、*catch:touchstart*。
21.bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡
22.需要在捕获阶段监听事件时,可以采用capture-bind、capture-catch关键字,后者将中断捕获阶段和取消冒泡阶段。
注册页面 23.onTabItemTap 怎么用? 24.onLoad,onReady 一个页面只会调用一次,除非被unload onShow 页面每次打开都调用 onHide 在navigateTo跳转或tab跳转时候调用 onUnload 在redirectTo重定向或者navigateBack退回前一个页面的时候调用 25.route 字段可以获取到当前页面的路径。(通过this.route获取) 26.setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步)。 27.其中 key 可以非常灵活,以数据路径的形式给出,如 array[2].message,a.b.c.d,并且不需要在 this.data 中预先定义。(不需要定义? 刺激) 28.单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。 29.请不要把 data 中任何一项的 value 设为 undefined ,否则这一项将不被设置并可能遗留一些潜在问题。
模块化
30.不同的文件中可以声明相同名字的变量和函数
31.通过全局函数 *getApp()* 可以获取全局的应用实例,如果需要全局的数据可以在 *App()* 中设置
32.exports 是 module.exports 的一个引用,因此在模块里边随意更改 exports 的指向会造成未知的错误。所以更推荐开发者采用 module.exports 来暴露模块接口
33.小程序目前不支持直接引入 node_modules , 开发者需要使用到 node_modules 时候建议拷贝出相关的代码到小程序的目录中。
数据绑定 34.数据都要放到双引号里,并用{{}}包括 35.data属性中的对象可以随意组合,但是如有存在变量名相同的情况,后边的会覆盖前面 36.花括号和引号之间如果有空格,将最终被解析成为字符串 例如
<view wx:for="{{[1,2,3]}} ">
{{item}}
</view>
等同于
<view wx:for="{{[1,2,3] + ' '}}">
{{item}}
</view>