微信小程序--渲染页面(列表渲染,条件渲染)

微信小程序--渲染页面(列表渲染,条件渲染),第1张

                                                                   列表渲染

1、wx:for

wx:for指令用于循环数组数据,生成组件。

循环出来的每一项通过item返回,每一项对应的索引,通过index返回。

    <view wx:for="{{songs}}" wx:key="index" class="items">

       <text>{{index}}--{{item.id}}--{{item.name}}</text>

    </view>

2、wx:key

wx:key="",设置每一项唯一的标识。循环列表时,添加wx:key的好处是,将来列表发生变化时重新渲染列表的损耗为更低。

                                                             条件渲染

条件圆凯弊渲染可以使用wx:if或hidden。

一般来说,wx:if 有更高的切换消耗而 hidden 有更高的初始渲染消耗。因此孙岁,如果需要频繁切换的情景下,用 hidden 更好,如果在运行时条件不大可能改变则 wx:if 较好。

1、wx:if

wx:if用于条件渲染:条件为真生成里面的内容,条件为假不会生成里面的内容。(每橘族次重新生成内容)

也可以用wx:elif 和 wx:else 来添加一个 else 块。

  <view wx:if="{{typeID == 1}}"> 1 </view>

  <view wx:elif="{{typeID == 2}}"> 2 </view>

  <view wx:else> 3 </view>

2、hidden

hidden用于条件渲染:条件为真隐藏里面的内容,条件为假显示里面的内容。(每次切换样式)

  <view hidden="{{typeID!= 2}}"> 1 </view>

你好,

如果motto为Hello World,则输出你好世界,否则原样输出。

这里是分支条件判断,直接在视图文件里修改,修改index.wxml

<text wx:if="{{motto != 'Hello World'}}" class="user-motto">{{motto}}text>

<text wx:else>你好世界text>

wx:if、wx:else、wx:elif,是微信条件判断的控制属性,需要添加盯颤到组件中使用。

但是如果我们想一次性判断多个组件标签,我们可以使用一个标签将多个组件包装起来,并在上边使用wx:if控制属性。

<block wx:if="{{true}}">

<view>李蔽 view1 view>

<view>view2 view>

block>

注意: 并不是一个组件,它仅仅是一个包装元素,不会在页面凯扰败中做任何渲染,只接受控制属性。

在浏览器端开发时,经常会有这种情况:单击某个元素,让其高亮显示,例如下图

这个用 js 很容易实现, 因为单击事件触发时,函数传入的 event 事件包氏粗戚含 target 对象,里面会有触发事件的 DOM 元素,我们只需要 *** 作这个 DOM 元素,为其添加 class 名就好了。

而在微信小程序开凳信发时,由于其类似于 vue 不建议直接 *** 作 DOM (两者都有API可以做到),事件触发的时候同样会有默认参数传入, 但是无法直接取到 DOM 节点本身,而是包含挂载的一些数据,和点击部位的坐标信息等,具体参阅官方文档 《事件·小程序》 , this 也总是指向 Page ,所以我们就需要 通过数据间接 *** 纵 DOM 来实现。

例如我遇到的问题是,我想做一个月历,当你选中某一天的时候,那一天高亮显示。

由于自己在做这一块时遇到了很多这方面的困惑,所以我在网上看了一些解决方案,下面列举一种在 CSDN 上看到的方案 :

这个方法绑定了一个动态的 class 名,用一个变量 _num 可以做到切换 class 的作用,当点击元素时,js 获取到节点上 data-num 上的值,这里将值赋给变量 _num ,相应的由于是数据驱动,节点上的 class 名经过计算变化为 cur ,其他的同理。

在没有搞清这个方法前,我制作月历是使用的条件渲染。具体做法是,每个日期节点准备两个 DOM 元素,一个带有 class="selected" ,一个没有, 经过列表渲染之后每个单位实际上存在两个逻辑上的元素,这个时候通过点击改变 Page 中 data 里面的 selectedDate 和 selectedDate ,进一步控制 wx:if 的条件来实现元素的渲染与否。

点击事件发生时,获取节点中的 data-month 和 data-date 值, 并赋给 selectedDate 和 selectedDate

由于每个月都有某些日期, 所以加个月份限制 ,这里我设置了只做从这个月到未来6个月的月历,所以不需要加年份限制。

深知这个方案问题很大,是这一类的MVVM框歼陵架因的条件渲染切换消耗较大,微信小程序开发文档中介绍了 wx:if 相关 :

当用户点击某个日期的时候会重新渲染整个 DOM ,所以这个方案并不好。

搞懂前面的逻辑,再来看这个方案就会很明白了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8232239.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存