小程序学习笔记-日常总结

小编推荐:Fundebug专注于JavaScript、微信小程序、微信小游戏,Node.js和Java实时BUG监控。真的是一个很好用的bug监控费服务,众多大佬公司都在使用。

目录结构

1.为了方便开发者减少配置项,描述页面的四个文件(home.json/home.js/home.wxml/home.wxss)必须具有相同的路径与文件名。


配置

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 并且设置 withShareTickettrue ,当用户将小程序转发到任一群聊之后,可以获取到此次转发的 shareTicket,此转发卡片在群聊中被其他用户打开时,可以在 App.onLaunch() 或 App.onShow 获取到另一个 shareTicket。这两步获取到的 shareTicket 均可通过 wx.getShareInfo()接口可以获取到相同的转发信息。

9.只有转发到群聊中打开才可以获取到 shareTickets 返回值,单聊没有 shareTickets


注册程序

10.当小程序初始化完成时,会触发 onLaunch(全局只触发一次)

11.当用户点击左上角关闭,或者按了设备 Home 键离开微信,小程序并没有直接销毁,而是进入了后台;
当再次进入微信或再次打开小程序,又会从后台进入前台

12.只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。


场景值
13.由于Android系统限制,目前还无法获取到按 Home 键退出到桌面,然后从桌面再次进小程序的场景值,对于这种情况,会保留上一次的场景值


页面栈

  1.  

页面重定向:当前页面出栈,新页面入栈
页面返回:页面不断出栈,直到目标返回页,新页面入栈
Tab 切换:页面全部出栈,只留下新的 Tab 页面
重加载:页面全部出栈,只留下新的页面

15.getCurrentPages() 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。

16.不要尝试修改页面栈,会导致路由以及页面状态错误。

  1.  

navigateTo, redirectTo 只能打开非 tabBar 页面。
switchTab 只能打开 tabBar 页面。
reLaunch 可以打开任意页面。

18.调用页面路由带的参数可以在目标页面的onLoad中获取。

(路由带参可以形如: /pages/life/life?id=1 路径+‘?' + 参数)


事件
19.冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递

  1. key 以bindcatch开头,然后跟上事件的类型,如bindtapcatchtouchstart。自基础库版本 1.5.0 起,bindcatch后可以紧跟一个冒号,其含义不变,如bind:tapcatch:touchstart

21.bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡

22.需要在捕获阶段监听事件时,可以采用capture-bind、capture-catch关键字,后者将中断捕获阶段和取消冒泡阶段。


注册页面

23.onTabItemTap 怎么用?当点击tab界面时触发

  1.  

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.花括号和引号之间如果有空格,将最终被解析成为字符串
例如


  {{item}}

等同于

  {{item}}


列表渲染
37.使用 wx:for-item 可以指定数组当前元素的变量名,使用 wx:for-index 可以指定数组当前下标的变量名

38.将 wx:for 用在标签上,以渲染一个包含多节点的结构块

39.wx:key 的值以两种形式提供
1)字符串,代表在 for 循环的 array 中 item 的某个 property,该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。
2)保留关键字 *this 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字

40.当 wx:for 的值为字符串时,会将字符串解析成字符串数组


条件渲染
41. 并不是一个组件,它仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性。

  1.  

wx:if 如果为false 则不渲染;
hidden 先渲染,如果为false 则隐藏
如果频繁切换,则使用hidden
如果不过多改变,则使用wx:if


模板
43.模板拥有自己的作用域,只能使用 data 传入的数据以及模版定义文件中定义的 模块


引用
44.import 有作用域的概念,即只会 import 目标文件中定义的 template,而不会 import 目标文件 import 的 template。

45.include 可以将目标文件除了