小程序的调试和通常的网页调试差很少,可是注意几点:小程序
打开调试器,选中Sources
页签,而后使用快捷键:ctrl+p
打开搜索框,选择后缀为sm
的文件进行调试。服务器
打开调试器,选中AppData
页签,能够查看到页面数据绑定的详细信息,是否正确绑定。记载着全部页面的数据绑定内容。
经过上面这个图片,咱们就能够知道,只有在datesArry
对象里面有须要绑定在页面上面的数据。xss
Template
模版
wxml / wxss / js
模块的复用,更好的封装ui和业务逻辑 增长复用性
当一块区域须要在多个地方使用的时候,能够把这个区域作成一个模版,在使用的时候调用这个模版便可,这样即减小重复代码的编写,又易于维护,让代码整洁。post
<template name='postItem'> <view class='box'> <view class='title-box'> <text class='title'>{{item.title}}</text> <text class='date'>{{item.date}}</text> </view> <image src='{{item.imgUrl}}' class='cont-image'></image> <text class='content'>{{item.content}}</text> </view> </template>
为了方便管理咱们的模版文件,能够在pages
文件夹下面,新建一个模版文件,里面存放编写的模版;咱们要使用标签template
来包裹代码,而且要给其加一个name
属性,固然也要编写对应的样式,和正常写样式的方法没有区别。ui
新建的模版文件里面只能存放模版的wxml
和wxss
文件,目前小程序的模版文件里面放入其余的文件类型不起做用,不能进行复用,虽然不报错,好比js
文件。url
template
标签只是一种占位符,告诉编译器这个地方是加载模版代码的,当页面编译完成,这个标签就消失,因此要对与模版文件响应事件,咱们就须要在加载模版文件的区域,使用一个能够添加事件的标签把其模版文件包裹起来,好比:view / block
spa
<view bindtap=” ....”> template模版代码 </view>
调试
编写好了模版代码,怎么样在须要加载模版代码的地方使用呢?code
首先,模版代码是在其余文件夹中,使用它,就必然要引入该模版文件,
通常在对应要引入模版文件的文件开头部分引入:xml
// 在对应的wxml文件中开头引入 <import src = '模版wxml文件路径' /> // 在对应的wxss文件中开头引入,注意末尾的分号 @import '模版wxss文件路径' ;
而后在引入模版文件的wxml
文件,适当位置使用
<template is = '模版的名字' data="{{要绑定到模版的数据}}"
到此,简单的模版引入和模版数据的绑定就完成,当咱们要循环模版的时候,只须要以下,在外面加一层标签便可:
// bolck标签的做用是做用事件到template模版上面 <block wx:for=" 服务器获取的数据集" wx:for-item='item' wx:for-index='index' > <template is = '模版的名字' data="{{要绑定到模版的数据,通常是服务器获取的一个数据对象item}}" </block>
前一篇文章说了一下数据的循环,借用属性wx:for=' '
,经过默认获得的item / index
能够知道对应的子对象数据和其索引值;可是咱们发现,每个模版绑定的数据项前面都要使用item.属性值
(子对象的属性值)来绑定数据,item
是多余的,有没有办法去简化?固然有!
<view wx:for='{{datesArry}}' wx:for-item='item' wx:for-index='idx'> // 在对应的item的前面加上 ... 三个点 <template is='postItem' data='{{...item}}' /> // <view>{{idx}}</view> </view>
在循环的子对象item
前面加上...
三个点,就行。简单的一行代码就实现了下图的页面。
前面加三个小点的做用:至关于把子对象给平铺,直接展开了里面的属性值,就能够直接在模版里面绑定这些属性值,不须要在模版里面指定其数据源(这就是...
的做用)
自定义属性通常说来都是使用data-
开头,绑定一些咱们须要存储的信息,传递到其余地方,好比点击的页面文章索引。
设置自定义属性很简单,可是要注意一点的是,在操做模版的时候,必定要在其外面包裹一层view
,才能进行操做;缘由是template
标签只是一个占位符,编译后就消失。
<view wx:for='{{datesArry}}' wx:for-item='item' data-postId='{{item.postId}} wx:for-index='idx' catchtap='onPostTap' '> <template is='postItem' data='{{...item}}' /> </view>
item.postId
是从服务器上面获取的,是数据源中的一个属性。
获取自定义属性,固然是经过事件去获取
onPostTap:function(event){ var postId=event.currentTarget.dataset.postid; var postIdData = event.currentTarget.dataset; console.log(postId); // 1 console.log(postIdData); }
event.currentTarget.dataset.postid
:获取的自定义属性值
event
事件对象event.currentTarget
:当前点击的目标元素event.currentTarget.dataset
:目标元素上面的自定义属性集合经过获取到的自定义属性,能够做为一个参数绑定一个连接上面,达到不一样栏位的点击跳转到不一样的页面:
onPostTap:function(event){ var postId=event.currentTarget.dataset.postid; wx.navigateTo({ url: 'xxxx?id='+postId, }) }
上面只是说明了在同一个页面之间获取自定义属性,要是在不一样页面之间怎么获取自定义属性,达到传递值的做用呢?
wx.navigateTo({ url: 'xxxx?id='+postId, })
经过上面的方法把参数postId
,传递出去,而后在要接收的页面中使用options.id
来获取
onLoad: function (options) { var postId = options.id; console.log(options); }
options.id
就是经过wx.navigateTo
传递过去的postId