第3章微信小程序组件 微信小程序框架为开发者提供了一系列的基础组件,这些原生组件让小程序具有良好的用户体验,同时也方便开发者快速开发。 本章主要目标  了解小程序组件的含义;  熟练掌握常见的容器组件、内容组件、表单组件、导航组件、媒体组件和地图组件的属性以及用法;  综合运用小程序组件完成问卷调查项目的设计与开发。 3.1组件概述 组件是视图层基本的组成单元,具备UI风格样式以及特定的功能效果。当打开某款小程序后,界面中的图片、文字等元素都需要使用组件,小程序组件使用灵活,组件之间通过相互嵌套进行界面设计,开发者可以通过组件的选择和样式属性设计出不同的界面效果。一个组件包括开始标签和结束标签,属性用来装饰这个组件的样式。 其语法格式如下: <标签名称 属性="值"> 内容 示例代码如下: 上述代码用表示一个按钮组件,在 图3.7text组件小案例 pages/text/text. js文件代码如下: var initData = "2019年,中国要推进这70个工程项目: 制定实施新时期"互联网+"行动,实施数字经济、"互联网+"重大工程,建设人工智能创新应用先导区,持续推进大数据综合试验区建设; 加快5G商用步伐和IPv6规模部署,加强人工智能、工业互联网、物联网等新型基础设施建设和融合应用。" var extraLine = []; //创建一个空数组 Page({ data: { text: initData }, add: function(e) { extraLine.push("增加一行") //增加一行 this.setData({ text: initData + '\n' + extraLine.join('\n') //更新数组值 }) }, reduce: function(e) { if(extraLine.length > 0) { extraLine.pop() //删除一行 this.setData({ text: initData + '\n' + extraLine.join('\n') //更新数组值 }) } } }) 【代码讲解】本例在text.wxml文件中通过组件存放文字,以及增加两个 图3.9progress组件小案例 pages/progress/progress.js文件代码如下: var per = 30; Page({ data: { progress: per,//数据初始化 }, add: function(e) { per += 10;//增加10% if (per > 100) { per = 100;//进度超过100%不增加 } this.setData({ progress: per//更新进度值 }) }, reduce: function(e) { per -= 10;//减少10% if (per < 0) { per = 0;//进度小于0%不减少 } this.setData({ progress: per//更新进度值 }) } }) pages/progress/progress.wxss文件代码如下: progress { padding: 80rpx; } 【代码讲解】本例在progress.wxml文件中放置组件,通过设置属性showinfo让进度条右边显示当前进度值,以及增加两个 其运行效果如图3.10所示。 type属性值如下。 (1) primary: 主要按钮,颜色为绿色。 (2) default: 默认按钮,颜色为灰白色。 (3) warn: 警告按钮,颜色为红色。 示例代码如下: 其运行效果如图3.11所示。 图3.10默认按钮和迷你按钮 图3.11type属性值对应的按钮 formtype属性值如下。 (1) submit: 提交表单。 (2) reset: 重置表单。 示例代码如下: 其运行效果如图3.12所示。 图3.12formtype属性值对应的按钮 视频讲解 37button组件小案例,运行效果如图3.13所示。 图3.13button组件小案例 pages/button/button.wxml文件代码如下: 7.button小案例 (1)迷你按钮 (2)按钮状态 (3)增加按钮事件 pages/button/button.js文件代码如下: Page({ getUserDetail: function(e) { console.log(e.detail.userInfo) } }) pages/button/button.wxss文件代码如下: button { margin: 10rpx; } 【代码讲解】在button.wxml文件中设置3组效果,分别为迷你按钮、普通按钮和带点击事件按钮。第1组设置相同的size属性和不同的type属性实现3种不同类型的迷你按钮; 第2组设置属性disabled和loading实现按钮禁用和加载动画效果; 第3组通过bindgetuserinfo="getUserDetail"为按钮增加事件,并追加opentype="getUserInfo"状态,然后在JS文件中定义点击事件。 3.4.2checkbox 为复选框组件,常用于在表单中进行多项数据的选择。复选框的为父控件,其内部嵌套若干个子控件。 组件只有一个属性,如表3.9所示。 表3.9组件属性 属性名类型默认值说明 bindchangeeventhandle选中项发生改变时触发change事件,detail = {value:[选中的checkbox的value数组]} 组件的属性如表3.10所示。 表3.10组件属性 属性名类型默认值说明 valuestring标识,选中时触发的change事件,并携带的value disabledbooleanfalse是否禁用 checkedbooleanfalse当前是否选中,可用来设置默认选中 colorcolorcheckbox的颜色,同CSS的color 示例代码如下: 老虎 大象 狮子 企鹅 其运行效果如图3.14所示。 图3.14复选框图示 视频讲解 如图3.14所示,“老虎”选项被选中,“大象”选项禁止选择,“狮子”和“企鹅”选项均未选中。 38checkbox组件小案例,运行效果如图3.15所示。 图3.15checkbox组件小案例 pages/checkbox/checkbox.wxml文件代码如下: 8.checkbox小案例 利用for循环批量生成 pages/checkbox/checkbox.js文件代码如下: Page({ data: { items: [ { name: "tiger", value: "老虎" }, { name: "elephant", value: "大象" }, { name: "lion", value: "狮子", checked: "true" }, { name: "penguin", value: "企鹅" }, { name: "elk", value: "麋鹿" }, { name: "swan", value: "天鹅" }, ] }, checkboxChange:function(e) { console.log("checkbox发生change事件,携带value值为: ", e.detail.value) } }) 【代码讲解】本例首先在checkbox.js文件中的data中定义一个数组items,用于记录复选框的名称(name)、值(value)以及选中情况,并在check.wxml文件中使用标签包裹,使用