1.与html的差异
在小程序中,以为的html标签被称作组件,常用对应如下
div 改用 img 改用 a 改用 同时小程序中也提供了 video audio swiper等常用组件 具体属性与h5有差别,需要注意 特别注意 并不是一个真的组件,不会在页面中做任何渲染,只接受控制属性 在写循环和条件的时候很常用 例如复制代码 view1 view2
2.页面入口文件
在根目录的app.json里配置pages字段的第一个值,为小程序的入口文件。其余的页面也要配置到里面
3.全局变量与全局方法
在根目录的app.js里面使用字段globalData来保存全局变量,之后在不同页面使用内置的 方法来获取app ,在使用app.globalData进行调用 例如在app.js中
App({ globalData:{ userName:"edward" }, onLaunch () { }, getSomething(){//全局方法 } ...})复制代码
在某一page中进行调用
const app = getApp()let userName = app.globalData.userName;Page({ data: {}, onLoad(options) { let data = app.getSomething(); ... }})复制代码
4.组件与页面
- 在微信小程序中不管是组件还是页面都有 .js .json .wxml .wxss 四个文件组成
- 页面需要在js中使用 Page({})方法进行构造即告诉小程序我是页面,如果页面使用了组件需要在相应json的usingComponents字段进行配置
- 组件需要在js中使用 Component({})方法进行构造即告诉小程序我是组件。
在小程序的开发工具中新建page/component会自动生成这4个文件,非常方便。
5.页面跳转
- 使用组件
- 使用小程序中的wx.redirectTo和wx.navigateTo跳转 使用wx.navigateBack返回 使用这两种跳转时,小程序会把新页面放入栈中,栈内元素最多10个。
- redirectTo在栈满之后会将旧页面出栈,在放入新页面。
- navigateTo在栈满之后不会将旧页面出栈。因此使用navigateTo,跳转10次之后就不能在跳转。
- navigateBack返回栈内保存的页面。
6.属性赋值false
如果直接写false没有{
{}},js会把false当成字符串,识别为true 想要赋值默认false则需要{ {false}} 例如复制代码
7.获取url参数
不需要原生js那样处理, 使用 onLoad方法在页面加载时触发。一个页面只会调用一次,可以在 onLoad 的参数中获取打开当前页面路径中的参数。
8.onLaunch方法中的请求没有执行完,首屏使用取不到值
在小程序中,我在onLaunch方法请求值并保存到globalData中,之后在首屏页面的onLoad中使用。这时是找不到这个值的。因为请求是异步的,请求结果没有返回,小程序就已经执行了onLoad方法。解决方法如下
- 使用启动页,在启动页获取信息之后再打开首屏页
- 使用Promise改良请求代码如下 app.js
App({ globalData:{ testId:"", }, getA(){ let that = this; return new Promise((resolve, reject) => { wx.request({ url: that.globalData.ajaxBaseUrl+'getA.php', header: { 'content-type': 'text/html'}, method:"post", success:res => { that.globalData.testId = res.data.testId; resolve(res.data.testId); } }) }) }})复制代码
page的index.js
getB(){ let that = this; return new Promise((resolve, reject) => { app.getA().then(testid=>{ wx.request({ url: app.globalData.ajaxBaseUrl+'getB.php?testId='+testid, header: { 'content-type': 'text/html' }, method:"post", success:res => { that.setData({ dataB:res.data.dataB }) }, fail:res=>{ } }) }) }) },复制代码
9.target与currentTarget
- target 触发事件的源组件。
- currentTarget 事件绑定的当前组件。
获取组件上的data-* 数据采用e.currentTarget.dataset.*