微信小程序开发--模板(template)使用,数据加载,点击交互
微信小程序视图层提供了 模板(template),可以在模板中定义代码片段,然后在不同的地方调用。结果在数据渲染那懵逼了。按照官网上对模板的说明和对数据的加载。
1、定义模板
使用name属性,作为模板的名字。然后在<template/>内定义代码片段,如:
<!--
index: int
msg: string
time: string
-->
<template name="msgItem"> //此处的name 有ID的意味,便于其他页面加载该模板时使用和查找
<view>
<text> {{index}}: {{msg}} </text>
<text> Time: {{time}} </text>
</view>
</template>
2、使用模板
先将模板的wxml文件和wxss文件路劲链接 导入到需要使用模板的wxml文件和wxss文件内,然后在需要导入模板的wxml文件内使用 is属性,声明需要的使用的模板,然后将模板所需要的data传入,如:
<import src="../template/msgItem/msgItem.wxml"/>
<template is="msgItem" data="{{...item}}"/> <!--{{...item}} ...是将数据展开,即这样将数据传输到模板时,实际上是将item按键值对展开-->
Page({
data: {
item: {
index: 0,
msg: 'this is a template',
time: '2016-09-15'
}
}
});
@import "../template/msgItem/msgItem.wxss";
is属性 可以使用Mustache语法,来动态决定具体需要渲染哪个模板:
<template name="odd">
<view> odd </view>
</template>
<template name="even">
<view> even </view>
</template> <block wx:for="{{[1, 2, 3, 4, 5]}}">
<template is="{{item % 2 == 0 ? 'even' : 'odd'}}"/>
</block>
3、模板数据传入
在页面的 template 标签中将模板所需要的data传入,如:
<!--展开:-->
<template is="lookRecord" data="{{...followRecords}}"/>
展开:传入的数据已经按键值对模式被一一展开,直接通过对象的属性就能获取对象中的值,这点跟VUE的模板使用差不多。但如果模板中存在 wx:for="{{followRecords}}" 运用,即传入的对象中某个属性的值是一个数组Array,系统则会报渲染结构错误,找不到属性。
,这时这种展开式传值就不行了。
那就采用不展开的形式。不展开:传入的数据在模板中按照属性一对一调用的方式获取数据,如:
<!--不展开:-->
<template is="lookRecord" data="{{lookRecord}}"/>
<view class="information-feedback-area" wx:for="{{lookRecord.feedbackBasicInfor}}" wx:for-index="index" wx:for-item="indexData">
<view class="information-feedback-options">
<view class="information-feedback-item">
<text class="information-options-title">{{indexData[0].option}}</text>
<image class="information-options-image" src="{{indexData[0].icon}}"></image>
</view>
</view>
<view class="information-feedback-options">
<view class="information-feedback-item">
<text class="information-options-title">{{indexData[1].option}}</text>
<image class="information-options-image" src="{{indexData[1].icon}}"></image>
</view>
</view>
</view>
4、模板点击交互
在理清楚数据的获取和渲染后,模板中绑定事件,实现正常交互,就是最后的问题了。由于模板(template)没有自己的JS文件,所以模板的交互功能方法都是写在引用该模板的页面的JS控制模块内。如:
我在 detailedInformation 页面调用了 basicInformation模板,那么 模板basicInformation 内的所有交互功能都是写在detailedInformation.js内的。下面定义事件,如:
//detailedInformation.js
templateInteraction: function () {
var tampData = this.data.item;
tampData.clickAction = "nodeOperation ";
this.setData({item: tampData})
},
nodeOperation: function () {
console.log("模板交互功能方法执行!")
},
然后在模板中绑定该事件,如:
<template is="basicInformation" data="{{item}}"></template>
<template name="basicInformation">
<view class="information-container">
<view class="information-text-area">
<view style="float: left;width: 19%">
<text class="information-text-title">电\r\t\r\t\r\t\r\t\r\t\r\t话1:</text>
</view>
<view style="float: left;width: 81%">
<text class="information-text-info" value="{{basicInformation.pho1}}">{{basicInformation.phone1}}</text>
<image class="information-text-image" src="{{phone}}" id="{{basicInformation.pho1}}"
bindtap="{{item.clickAction}}"></image>
</view>
</view>
<view class="information-text-area">
<view style="float: left;width: 19%">
<text class="information-text-title">电\r\t\r\t\r\t\r\r\t\r\t话2:</text>
</view>
<view style="float: left;width: 81%">
<text class="information-text-info" value="{{basicInformation.pho2}}">{{basicInformation.phone2}}</text>
<image class="information-text-image" src="{{phone}}" id="{{basicInformation.pho2}}"
bindtap="{{item.clickAction}}"></image>
</view>
</view>
</view>
</template>
这样点击模板中的具体元素就可以调用该方法了。虽然这样可以调用事件方法,但是仅适用于结构简单,且是循环出来的节点(因为基本功能都一样,操作也基本相同)。但对于结构复杂,功能需求不同的节点则不能适用。这个时候就只能具体节点具体功能具体定义事件了。
当然绝大部分模板的交互功能都不多,既然都在用模板了,那么肯定是以数据展示为主,没事去操作它干嘛。包含大量操作和交互功能的直接写页面,谁还整模板,自己坑自己么。
微信小程序开发--模板(template)使用,数据加载,点击交互的更多相关文章
- 微信小程序开发——列表分页上拉加载封装实现(订单列表为例,订单状态改变后刷新列表滚动位置不变)
业务需求: 业务需求是给订单列表添加分页功能,也就是上拉加载这种每次只请求加载固定数量的数据. 需求分析: 对业务来说就是简单的分页上拉加载,但是对于技术实现来说,除了要处理分页数据的累加加载,还要处 ...
- [微信小程序] 微信小程序获取用户定位信息并加载对应城市信息,wx.getLocation,腾讯地图小程序api,微信小程序经纬度逆解析地理信息
因为需要在小程序加个定位并加载对应城市信息 然而小程序自带api目前只能获取经纬度不能逆解析,虽然自己解析方式,但是同时也要调用地图,难道用户每次进小程序还要强行打开地图选择地址才定位吗?多麻烦也不利 ...
- 微信小程序开发模板消息的时候 出现 errcode: 41028, errmsg: "invalid form id hint:
小程序开发模板消息的时候 出现 errcode: 41028, errmsg: "invalid form id hint: 我是使用的微信支付发送模板消息,提示的formid无效的 大家 ...
- 微信小程序小结(4) -- 分包加载及小程序间跳转
分包加载 某些情况下,开发者需要将小程序划分成不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载(主要是空间不够用,哈哈~). 在构建小程序分包项目时,构建会输出一个或多个功能的分包,其中 ...
- 微信小程序下拉刷新和上拉加载
小程序知识点二 1.上拉加载和下拉刷新 Wxml文件 <scroll-view scroll-top="{{scrollTop}}" scroll-y="true& ...
- 微信小程序开发——模板中加载html代码
最新方法可以使用微信小程序提供的 rich-text (富文本)组件直接写解析html,详见 rich-text: <rich-text class='f13 c_9' nodes=" ...
- 【微信小程序】scroll-view 的上拉加载和下拉刷新
1.在微信小程序中,想到 下拉刷新 和 上拉加载,如果是整个页面都拖动的话,可以在页面配置中,配置 enablePullDownRefresh 和 onReachBottomDistance 然后在 ...
- 【template、import、include】微信小程序:模板(template)、引用(import、include)说明
模板(template): 定义模板 <template name="[String]"> <!-- 模板代码 --> <view> <t ...
- 微信小程序开发——文本框种输入手机号,点击获取验证码无反应的处理方法
异常描述: 如下图,输入手机号码之后,点击右侧的获取验证码,在开发工具是OK的,真机测试无反应: 页面编码跟H5差不多的,H5没出现这个问题,但是小程序就不一样了. 异常分析: 页面结构层面,为了方便 ...
随机推荐
- MySQL 5.5主从复制(Replication)
简介 MySQL的主从复制(Replication),可以保持两台MySQL数据库的内容一致.因为其同步过程是异步的,所以备份数据库上做任何操作,都不会影响主数据库的性能.对游戏后台数据库而言,这是一 ...
- MATLAB下数组随机打乱顺序的方法
一:问题 有两个规模相同的数组,两个数组相同位置的元素一一对应,现在要将两数组的元素同时打乱顺序,并且乱序后的两数组对应位置元素要保持乱序前的对应关系. 二:方法 采用randperm()函数,产生 ...
- js便签笔记(10) - 分享:json.js源码解读笔记
1. 如何理解“json” 首先应该意识到,json是一种数据转换格式,既然是个“格式”,就是个抽象的东西.它不是js对象,也不是字符串,它只是一种格式,一种规定而已. 这个格式规定了如何将js对象转 ...
- Redis注意事项
1.Redis3.0没有虚拟内存概念,已从2.4就移除: 2.redis挂掉并重启时,如果有主从备份的,主机挂掉重启时先关掉主从备份,不然从机的数据会被冲洗掉 数据恢复时如果有 AOF(原理是将Rei ...
- windows10 设置软件开机启动
在 C:\Users\your_name\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 在这个目录下,新建你想开机启动的软 ...
- Mybatis插件使用-统计sql执行时间
背景介绍:最近由于产品数据量较大,sql执行十分低效,正在做数据库优化,所以想在日志中看到每个sql执行的时间,以方便针对性的优化. 查找相关资料,了解到Mybatis有一款插件,是基于interce ...
- 创建第一个MVC应用程序
整个国庆期假,Insus.NET没有出门,在家静心修炼MVC.这意味着Insus.NET将来的日子里会以MVC为学习,开发,应用作为重点,不过现在才开始踏出第一步...... 路慢慢...... 下载 ...
- 手机调试 ---- Node启动服务
最近刚开始做手机端Web网站, 在这段时间遇到过很多坑.比如各个安卓手机的JS兼容性问题,以及安卓手机与苹果手机的差异化. 最近在做一个需求.进入手机站点主页,会弹出置顶APP下载框,用户点击图片,如 ...
- 数据结构与算法--最短路径之Dijkstra算法
数据结构与算法--最短路径之Dijkstra算法 加权图中,我们很可能关心这样一个问题:从一个顶点到另一个顶点成本最小的路径.比如从成都到北京,途中还有好多城市,如何规划路线,能使总路程最小:或者我们 ...
- leetcode树专题894.897,919,951
满二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点. 返回包含 N 个结点的所有可能满二叉树的列表. 答案的每个元素都是一个可能树的根结点. 答案中每个树的每个结点都必须有 node.va ...