目录

一、WXML 渲染语法

二、客户端数据储存

三、远程数据请求

四、组件

五、获取用户个人信息

六、多页面的跳转

七、wx.navigateTo()


本篇就介绍怎么使用 API。

所有示例的完整代码,都可以从 GitHub 的代码仓库下载。

一、WXML 渲染语法

前面说过,小程序的页面结构使用 WXML 语言进行描述。

WXML 的全称是微信页面标签语言(Weixin Markup Language),它不仅提供了许多功能标签,还有一套自己的语法,可以设置页面渲染的生效条件,以及进行循环处理。

微信 API 提供的数据,就通过 WXML 的渲染语法展现在页面上。比如,home.js里面的数据源是一个数组。


Page({data: {items: ['事项 A', '事项 B', '事项 C']}
});

上面代码中,Page()的参数配置对象的data.items属性是一个数组。通过数据绑定机制,页面可以读取全局变量items,拿到这个数组。

拿到数组以后,怎样将每一个数组成员展现在页面上呢?WXML 的数组循环语法,就是一个很简便的方法。

打开home.wxml,改成下面的代码。


<view><text class="title" wx:for="{{items}}">{{index}}、 {{item}}</text>
</view>

上面代码中,<text>标签的wx:for属性,表示当前标签(<text>)启用数组循环,处理items数组。数组有多少个成员,就会生成多少个<text>。渲染后的页面结构如下。


<view><text>...</text><text>...</text><text>...</text>
</view>

在循环体内,当前数组成员的位置序号(从0开始)绑定变量index,成员的值绑定变量item

开发者工具导入项目代码,页面渲染结果如下。

这个示例的完整代码,可以参考代码仓库。

WXML 的其他渲染语法(主要是条件判断和对象处理),请查看官方文档。

二、客户端数据储存

页面渲染用到的外部数据,如果每次都从服务器或 API 获取,有时可能会比较慢,用户体验不好。

小程序允许将一部分数据保存在客户端(即微信 App)的本地储存里面(其实就是自定义的缓存)。下次需要用到这些数据的时候,就直接从本地读取,这样就大大加快了渲染。本节介绍怎么使用客户端数据储存。

打开home.wxml,改成下面的代码。


<view><text class="title" wx:for="{{items}}">{{index}}、 {{item}}</text><input placeholder="输入新增事项" bind:input="inputHandler"/><button bind:tap="buttonHandler">确定</button>
</view>

上面代码除了展示数组items,还新增了一个输入框和一个按钮,用来接受用户的输入。背后的意图是,用户通过输入框,为items数组加入新成员。

开发者工具导入项目代码,页面渲染结果如下。

注意,输入框有一个input事件的监听函数inputHandler(输入内容改变时触发),按钮有一个tap事件的监听函数buttonHandler(点击按钮时触发)。这两个监听函数负责处理用户的输入。

然后,打开home.js,代码修改如下。


Page({data: {items: [],inputValue: ''},inputHandler(event) {this.setData({inputValue: event.detail.value || ''});},buttonHandler(event) {const newItem = this.data.inputValue.trim();if (!newItem) return;const itemArr = [...this.data.items, newItem];wx.setStorageSync('items', itemArr);this.setData({ items: itemArr });},onLoad() {const itemArr = wx.getStorageSync('items') || []; this.setData({ items: itemArr });}
});

上面代码中,输入框监听函数inputHandler()只做了一件事,就是每当用户的输入发生变化时,先从事件对象eventdetail.value属性上拿到输入的内容,然后将其写入全局变量inputValue。如果用户删除了输入框里面的内容,inputValue就设为空字符串。

按钮监听函数buttonHandler()是每当用户点击提交按钮,就会执行。它先从inputValue拿到用户输入的内容,确定非空以后,就将其加入items数组。然后,使用微信提供的wx.setStorageSync()方法,将items数组存储在客户端。最后使用this.setData()方法更新一下全局变量items,进而触发页面的重新渲染。

wx.setStorageSync()方法属于小程序的客户端数据储存 API,用于将数据写入客户端储存。它接受两个参数,分别是键名和键值。与之配套的,还有一个wx.getStorageSync()方法,用于读取客户端储存的数据。它只有一个参数,就是键名。这两个方法都是同步的,小程序也提供异步版本,请参考官方文档。

最后,上面代码中,Page()的参数配置对象还有一个onLoad()方法。该方法属于页面的生命周期方法,页面加载后会自动执行该方法。它只执行一次,用于页面初始化,这里的意图是每次用户打开页面,都通过wx.getStorageSync()方法,从客户端取出以前存储的数据,显示在页面上。

这个示例的完整代码,可以参考代码仓库。

必须牢记的是,客户端储存是不可靠的,随时可能消失(比如用户清理缓存)。用户换了一台手机,或者本机重装微信,原来的数据就丢失了。所以,它只适合保存一些不重要的临时数据,最常见的用途一般就是作为缓存,加快页面显示。

三、远程数据请求

小程序可以从外部服务器读取数据,也可以向服务器发送数据。本节就来看看怎么使用小程序的网络能力。

微信规定,只有后台登记过的服务器域名,才可以进行通信。不过,开发者工具允许开发时放松这个限制。

按照上图,点击开发者工具右上角的三条横线("详情"),选中"不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书" 。这样的话,小程序在开发时,就可以跟服务器进行通信了。

下面,我们在本地启动一个开发服务器。为了简单起见,我选用了 json-server 作为本地服务器,它的好处是只要有一个 JSON 数据文件,就能自动生成 RESTful 接口。

首先,新建一个数据文件db.json,内容如下。


{"items": ["事项 A", "事项 B", "事项 C"]
}

然后,确认本机安装了 Node.js 以后,进入db.json所在的目录,在命令行执行下面命令,启动服务器。


npx json-server db.json

正常情况下,这时你打开浏览器访问localhost:3000/items这个网址,就能看到返回了一个数组["事项 A", "事项 B", "事项 C"]

接着,打开home.js,代码修改如下。


Page({data: { items: [] },onLoad() {const that = this;wx.request({url: 'http://localhost:3000/items',success(res) {that.setData({ items: res.data });}});}
});

上面代码中,生命周期方法onLoad()会在页面加载后自动执行,这时就会执行wx.request()方法去请求远程数据。如果请求成功,就会执行回调函数succcess(),更新页面全局变量items,从而让远程数据显示在页面上。

wx.request()方法就是小程序的网络请求 API,通过它可以发送 HTTP 请求。它的参数配置对象最少需要指定url属性(请求的网址)和succcess()方法(服务器返回数据的处理函数)。其他参数请参考官方文档。

开发者工具导入项目代码,页面渲染结果如下。它的初始数据是从服务器拿到的。

这个示例的完整代码,可以参考代码仓库。

这个例子只实现了远程数据获取,json-server 实际上还支持数据的新增和删改,大家可以作为练习,自己来实现。

四、<open-data>组件

如果要在页面上展示当前用户的身份信息,可以使用小程序提供的<open-data>组件。

打开home.wxml文件,代码修改如下。


<view><open-data type="userAvatarUrl"></open-data><open-data type="userNickName"></open-data>
</view>

上面代码中,<open-data>组件的type属性指定所要展示的信息类型,userAvatarUrl表示展示用户头像,userNickName表示用户昵称。

开发者工具导入项目代码,页面渲染结果如下,显示你的头像和用户昵称。

<open-data>支持的用户信息如下。

  • userNickName:用户昵称
  • userAvatarUrl:用户头像
  • userGender:用户性别
  • userCity:用户所在城市
  • userProvince:用户所在省份
  • userCountry:用户所在国家
  • userLanguage:用户的语言

这个示例的完整代码,可以参考代码仓库。

<open-data>不需要用户授权,也不需要登录,所以用起来很方便。但也是因为这个原因,小程序不允许用户脚本读取<open-data>返回的信息。

五、获取用户个人信息

如果想拿到用户的个人信息,必须得到授权。官方建议,通过按钮方式获取授权。

打开home.wxml文件,代码修改如下。


<view><text class="title">hello {{name}}</text><button open-type="getUserInfo" bind:getuserinfo="buttonHandler">授权获取用户个人信息</button>
</view>

上面代码中,<button>标签的open-type属性,指定按钮用于获取用户信息,bind:getuserinfo属性表示点击按钮会触发getuserinfo事件,即跳出对话框,询问用户是否同意授权。

用户点击"允许",脚本就可以得到用户信息。

home.js文件的脚本代码如下。


Page({data: { name: '' },buttonHandler(event) {if (!event.detail.userInfo) return;this.setData({name: event.detail.userInfo.nickName});}
});

上面代码中,buttonHandler()是按钮点击的监听函数,不管用户点击"拒绝"或"允许",都会执行这个函数。我们可以通过事件对象event有没有detail.userInfo属性,来判断用户点击了哪个按钮。如果能拿到event.detail.userInfo属性,就表示用户允许读取个人信息。这个属性是一个对象,里面就是各种用户信息,比如头像、昵称等等。

这个示例的完整代码,可以参考代码仓库。

实际开发中,可以先用wx.getSetting()方法判断一下,用户是否已经授权过。如果已经授权过,就不用再次请求授权,而是直接用wx.getUserInfo()方法获取用户信息。

注意,这种方法返回的用户信息之中,不包括能够真正识别唯一用户的openid属性。这个属性需要用到保密的小程序密钥去请求,所以不能放在前端获取,而要放在后端。这里就不涉及了。

六、多页面的跳转

真正的小程序不会只有一个页面,而是多个页面,所以必须能在页面之间实现跳转。

app.json配置文件的pages属性就用来指定小程序有多少个页面。


{"pages": ["pages/home/home","pages/second/second"],"window": ...
}

上面代码中,pages数组包含两个页面。以后每新增一个页面,都必须把页面路径写在pages数组里面,否则就是无效页面。排在第一位的页面,就是小程序打开时,默认展示的页面。

新建第二个页面的步骤如下。

第一步,新建pages/second目录。

第二步,在该目录里面,新建文件second.js,代码如下。


Page({});

第三步,新建第二页的页面文件second.wxml,代码如下。


<view><text class="title">这是第二页</text><navigator url="../home/home">前往首页</navigator>
</view>

上面代码中,<navigator>就是链接标签,相当于网页标签<a>,只要用户点击就可以跳转到url属性指定的页面(这里是第一页的位置)。

第四步,修改第一页的页面文件home.wxml,让用户能够点击进入第二页。


<view><text class="title">这是首页</text><navigator url="../second/second">前往第二页</navigator>
</view>

开发者工具导入项目代码,页面渲染结果如下。

用户点击"前往第二页",就会看到第二个页面。

这个示例的完整代码,可以参考代码仓库。

七、wx.navigateTo()

除了使用<navigator>组件进行页面跳转,小程序也提供了页面跳转的脚本方法wx.navigateTo()

首先,打开home.wxml文件,代码修改如下。


<view><text class="title">这是首页</text><button bind:tap="buttonHandler">前往第二页</button>
</view>

开发者工具导入项目代码,页面渲染结果如下。

然后,打开home.js文件,代码修改如下。


Page({buttonHandler(event) {wx.navigateTo({url: '../second/second'});}
});

上面代码中,buttonHandler()是按钮点击的监听函数,只要用户点击按钮,就会调用wx.navigateTo()方法。该方法的参数是一个配置对象,该对象的url属性指定了跳转目标的位置,自动跳转到那个页面。

这个示例的完整代码,可以参考代码仓库。

微信小程序入门教程之四:API 使用相关推荐

  1. 微信小程序入门教程+案例demo

    微信小程序入门教程+案例demo 尊重原创,转载请注明出处:原文查看惊喜更多 http://blog.csdn.net/qq137722697 首先摆在好姿态,--微信小程序开发也就那么回事.你只需要 ...

  2. 从零开始的微信小程序入门教程(一)

    从零开始的微信小程序入门教程(一) 之前说要和同事一起开发个微信小程序项目,现在也在界面设计,功能定位等需求上开始实施了.所以在还未正式写项目前,打算在空闲时间学习下小程序.本意是在学习过程中结合实践 ...

  3. 从零开始的微信小程序入门教程

    之前说要和同事一起开发个微信小程序项目,现在也在界面设计,功能定位等需求上开始实施了.所以在还未正式写项目前,打算在空闲时间学习下小程序.本意是在学习过程中结合实践整理出一个较为入门且不是很厚的教程, ...

  4. 微信小程序入门教程---列表渲染多层嵌套循环及wx:key的使用(双层for循环)

    前言 入门教程之列表渲染多层嵌套循环,目前官方的文档里,主要是一维数组列表渲染的案例,还是比较简单单一,给刚入门的童鞋还是无从入手的感觉. <view wx:for="{{items} ...

  5. 微信小程序入门教程 --(保姆级)

    一.小程序注册 1.首先,到小程序官网注册自己的小程序账号,以下附有地址和教程: 小程序官网 进入这个地址之后,会看到这样的页面,点击立即注册按钮 2.在接下来的页面,选择小程序 3.然后根据提示完成 ...

  6. 开发微信小程序入门教程,含破解工具

    2016年09月21日晚 微信发不了微信"小程序"的内测版,一时间整个互联网都炸了锅.个大新闻.论坛都在讨论这个事情. 作为互联网的一猿,我们怎能不紧跟时代的脚步.于是第二天上午也 ...

  7. 微信小程序入门教程学习笔记

    写在前面: 作为一个刚刚入坑微信小程序的小白,以下是我在学习中的笔记,因为我真的太健忘了... 文章中可能会有错误,但是我会不断的修正的. 谢谢浏览,如有错误烦请指正 (≧∀≦)ゞ 微信官方的小程序开 ...

  8. 微信小程序入门教程之三:脚本编程

    这个系列教程的前两篇,介绍了小程序的项目结构和页面样式. 今天,接着往下讲,教大家为小程序加入 JavaScript 脚本,做出动态效果,以及如何跟用户互动.学会了脚本,就能做出复杂的页面了. 本篇的 ...

  9. 微信小程序入门教程及实例

    原文地址:https://mp.weixin.qq.com/s?__biz=MzAwNjI5MTYyMw==&mid=2651493295&idx=1&sn=4dc4c5701 ...

最新文章

  1. C++面试宝典2011版
  2. linq Distinct
  3. Bash脚本教程之行操作
  4. python __new__中单例的作用
  5. SSR -- 服务端渲染基础
  6. [java] DOS编译 .java 文件得到 .class 文件 并执行 以及使用外部 .jar包 时的命令...
  7. msp430项目编程44
  8. jQuery.noConflict() 解决冲突 原理深入
  9. linux mysql 实战_Linux平台MySQL多实例项目实施_MySQL数据库基础与项目实战06
  10. python提取pdf中的文字和图片_python 三种方法提取pdf中的图片
  11. 2018年上半赛季总结
  12. 就知道你喜欢中文版:Spread .NET 15.2 FOR WPF
  13. HTML网页设计结课作业~仿蘑菇街商城网站源码(HTML+CSS+JS)
  14. 【转】BAT机器学习面试1000题系列(1~50)
  15. Paddle2ONNX最新升级:飞桨模型全面支持ONNX协议啦!
  16. 【javascript-基础小练习】开发一款软件,根据公式(身高-108)*2=体重,可以有10斤左右的浮动。来观察测试者体重是否合适
  17. 上海地铁+android+nfc,在上海手机竟然能当交通卡用!最全攻略来了!
  18. 数字孪生十问:分析与思考
  19. 第三方软件库的创建,使用U盘安装Linux系统,U盘的初始化,system-config-kickstart安装虚拟机
  20. Java实体类设置联合主键_Hibernate 注解方式设置联合主键

热门文章

  1. python接口自动化--接口测试工具介绍(详解)
  2. DSN,W-DSN文献资料整理
  3. hive安装mysql_Hive安装MySql
  4. ios 隐私政策网址(URL)
  5. smil_SMIL简介-鞋串上的多媒体演示
  6. 国外计算机科学英语演讲,华工学子英语演讲共庆祖国华诞
  7. python有道字典_有道词典python版
  8. 机器学习笔记——逻辑斯蒂回归(Logistic)
  9. 15计算机应用专业综合理论试卷答案,2013年南通市对口单招计算机应用专业综合理论第二次模拟试卷(含答案).doc...
  10. 还记得这些常用String方法吗?