美文网首页微信小程序
4-9 (难点)使用列表渲染wx-for改写新闻列表(理解还不透

4-9 (难点)使用列表渲染wx-for改写新闻列表(理解还不透

作者: 留白_汉服vs插画 | 来源:发表于2017-11-20 15:47 被阅读52次

关于数据绑定的详细教程放在了4-7,不懂就再复习一遍。

知识点1、虽然可以通过数据绑定,加载从服务器来的数据。但是一个网页不可能只有一个文章,也不可能每次都单独写每一个文章,每一个都数据绑定。比如6个文章,那么文章复制6遍,如果有一个样式改变了,那么就要改所有。这不符合复用的思想。复用不仅仅是函数,所有东西都应该复用起来。包括标签的复用。通过复用来实现。那么就通过本节来实现。

假设从服务器加载来的数据在一个数组posts_content中

知识点2、解决上面问题的办法可以通过数组数据。那如何把数组数据绑定到wxml里面?在wxml里面for循环。先搞清楚,循环的子元素是什么?循环的子元素实际就是一个文章列表综合的一个组件:

通过block标签,将要循环的地方包裹起来。block就是一个块,就像一个括号,凡是block之间的代码视为一个整体。<block wx:for="{{posts_content}}"  wx:for-item="item">  </block> 这里通过for设置posts_content是一个数组对象。for="{{posts_content}}" 要加引号。组件属性数据绑定要加引号,但是在内容中不需要加引号,比如上图中29行的{{view_num}} 。然后通过wx:for-item="item"设置循环的项,这里的item就可以指代数组元素中的子元素了。关于点用法:比如item.date指的就是数组的一个子元素的date属性。用{{item.date}}来代替之前的{{date}}。

有一个问题,在post.js里面this.setData({posts_content}); 这里posts_content要是一个对象的样式才行。接受的参数是一个对象。这一块有点不太明白。有关于key的东西。答:之前理解有错误,this.setData({}) 接受的第一个参数就是一个对象。再说{} 也表示对象的意思。另外有关this.setData 函数的使用和说明在4-7节。

this.setData接受的是一个对象,而onload里面,接受的数据posts_content是一个对象数组,这时候如果直接传递,会报错,如下:

所以如下,把对象数组posts_content作为post_key的值,组合成一个对象传递给data。

使用wx:for 可以大大减少标签结构相同的代码段,更关键的是,当数据是从服务器端发来的时候,你不知道这样的数据是什么,也不知道有几个,没有办法进行硬编码到前端。最重要的是组件复用的思想。减少代码里。代码中删掉wx:for-item 也没有关系,因为默认使用的就是它。

简要总结一下如何使用数据绑定,以及微信wx:for:

1、首先onload(或者其他的函数)里面接受服务器传来的数据对象,放在一个对象数组里,这里写作arr。

2、在this.setData() 接受的参数为对象,所以不能直接把对象数组arr直接当参数进行传递,所以给它一个键值key,写作this.setData({ key:arr }) 就把对象数组传给了同一个js文件的中data。

3、data中,可以有key:arr,也可以没有。

4、wxml中,通过<block wx:for="{{key}}"> </block> 包裹要循环显示数据的组件。组件中对应的数据绑定前使用  item.  前缀。

以下列表渲染教程:

wx:for

在组件上使用wx:for控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。默认数组的当前项的下标变量名默认为index,数组当前项的变量名默认为item

使用wx:for-item可以指定数组当前元素的变量名,也就是当前数组的循环元素名称为item,在wxml中使用的数组元素某一个属性的时候,item.xxx 就可以了。如下图

使用wx:for-index可以指定数组当前下标的变量名:

wx:for也可以嵌套,下边是一个九九乘法表

block wx:for

类似block wx:if,也可以将wx:for用在<block/>标签上,以渲染一个包含多节点的结构块。例如:


相关文章

网友评论

    本文标题:4-9 (难点)使用列表渲染wx-for改写新闻列表(理解还不透

    本文链接:https://www.haomeiwen.com/subject/jnijpxtx.html