《微信小程序开发从入门到实战》学习十九

3.3 开发创建投票页面

3.3.7 wx:for列表渲染

接下来为创建的投票页面添加一个“添加选项”的功能。需要用户输入文字,应该使用input组件。头投票的数量是不确定的,面对不确定数量的组件的情况时,可以使用wx:for属性对组件进行列表渲染。

使用wx:for需要在逻辑层用数组类型的变量保存数据。

现在使用wx:for练手,代码如下:

js文件里

  data: {

    array:[{msg:'First Msg'},{msg:'Second Msg'}]

  }

wxml

    <view wx:for="{{array}}">

    {{index}}:{{item.msg}}

    </view>

预览效果如下:

 view组件包含wx:for属性,当array中个数有几个,view组件就渲染几次,index变量获取当前元素的数组下标值,还可以通过item变量直接获取当前元素。

渲染的结果如下:

wx:for可以使用嵌套使用,嵌套后,不能确定item变量和index变量属于父组件还是子组件的数据,可以使用wx:for-item属性和wx:for-index属性为它们进行重命名。九九乘法表嵌套代码如下:

wxml文件中

<view wx:for="{{[1,2,3,4,5,6,7,8,9]}}" wx:for-item="i">

      <view wx:for="{{[1,2,3,4,5,6,7,8,9]}}" wx:for-item="j">

        <view wx:if="{{i <= j}}">

          {{i}} * {{j}} = {{i*j}}

        </view>

      </view>

    </view>

预览效果如下:

现在开始用列表渲染功能为单位增加一些不确定数量的input组件。

先准备好逻辑层的数据,在data对象中增加一个optionList,用来保存每一个投票 选项的内容。createVote.js文件代码如下:

  data: {

    formTitle: '',

    formDesc: '',

    optionList: []

  }

数组变量初始为空,在界面增加一个“添加选项”的按钮,当单击按钮时,就向数组中插入一个 新的元素。在createVote.wxml文件的textarea组件的下面增加如下代码:

    <view class="btn-add-option" bind:tap="onTapAddOption">+ 添加选项</view>

为按钮添加样式createVote.wxss代码如下:

.btn-add-option {

  font-size: 12pt;

  color: #26AB28;

  padding: 40rpx 0;

}

在JS文件添加按钮的单击事件处理函数:

  onTapAddOption(e) {

    const newOptionList = this.data.optionList //获取当前的optionList

    newOptionList.push('') //在list数组中新增一个空字符串,插入数组最后面

    this.setData({

      optionList: newOptionList //更新data对象中的optionList

    })

  }

每次单击“添加选项”,逻辑层的optionList数组就会增加一个元素,在调试器的AppData面板中可以看到逻辑层数据的变化,预览效果如下:

利用逻辑层的optionList变量,增加input组件。在“添加选项”前添加代码,WXML代码如下:

<view wx:for="{{optionList}}" wx:key="index" class="form-option">

      <view class="form-input-wrapper">

        <input value="{{item}}" class="form-input" placeholder="选项" placeholder-class="form-text-placeholder"

        bindinput="onOptionInputChange"

        data-option-index="{{index}}" />

      </view>

    </view>

wxml代码里之前没有wx:key,保存时报错了,“Now you can provide attr wx:key for a wx:for to improve performance.”。

根据微信小程序 消除警告: Now you can provide attr `wx:key` for a `wx:for` to improve performance.-CSDN博客

小程序提示报Now you can provide attr "wx:key" for a "wx:for" to improve performance.-CSDN博客

wx:key:

如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 中的输入内容, 的选中状态),需要使用 wx:key 来指定列表中项目的唯一的标识符。

添加了wx:key,后面成功运行了,开心

两个view组件包裹input组件是为了后面实现一些样式,wxss样式代码如下:

.form-option {

  margin-top: 20rpx;

}

.form-input-wrapper {

  color: #333;

  font-size: 12pt;

  border-bottom:1rpx solid #eee;

  padding: 20rpx 0;

}

为实现数据在逻辑层与视图层的双向传递,在JS文件中编写投票选项输入的输入事件处理函数,代码如下:

  onOptionInputChange(e){

    const newOptionList = this.data.optionList //获取当前的optionList

    const changedIndex = e.currentTarget.dataset.optionIndex //获取当前修改的元素的下标

    newOptionList[changedIndex] = e.detail.value //将视图层的数据更新到逻辑层变量中

    this.setData({

      optionList: newOptionList //更新data对象中的optionList

    })

  }

预览效果如下:

获取当前修改的元素的下标:e.currentTarget.dataset.optionIndex

这个值在wxml中input组件中data-option-index属性传入。

如果组件上绑定了事件处理函数,可通过data-开头的属性向事件处理函数传递额外的数据,会保存在event.currentTarget.dataset对象,数据的key的名字是data-属性后面的部分,会将短横线连接的形式改为optionIndex的驼峰式名称。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/196084.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【腾讯云 HAI域探秘】——即时职场生存指南小游戏以及【自行搭建Stable Diffusion图片AI绘制 | ChatGLM2-6B AI进行智能对话 | Pytorch2.0 AI框架视频处理】

利用HAI的ChatGLM2 6B做一个即时对话小游戏 ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本&#xff0c;在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上&#xff0c;ChatGLM2-6B 引入了更强大的性能、更长的上下文、更高效的推理&#xff0c;…

git使用及常用命令

在初入公司中&#xff0c;若使用的是git管理工具&#xff0c;需要做以下步骤&#xff1a; 1&#xff0c;常用命令在&#xff1a; &#xff08;1&#xff09;&#xff0c;git config --global user.name xxx(名字) //若不设置 那么下次提交代码时会报错 其次该设置名字和…

【运维篇】Redis常见运维命令详解

文章目录 1. 前言2. 连接管理命令详解2.1 AUTH命令2.2 PING命令2.3 SELECT命令2.4 QUIT命令 3. 服务器管理命令详解3.1 FLUSHALL命令3.2 SAVE/BGSAVE命令3.3 SHUTDOWN命令 4. 安全管理命令详解4.1 CONFIG命令4.1.1 CONFIG SET命令用法4.1.2 CONFIG GET命令用法 4.2 AUTH命令 5.…

六、文件上传漏洞

下面内容部分&#xff1a;参考 一、文件上传漏洞解释 解释&#xff1a;文件上传漏洞一般指的就是用户能够绕过服务器的规则设置将自己的木马程序放置于服务器实现远程shell&#xff08;例如使用蚁剑远程连接&#xff09;&#xff0c;常见的木马有一句话木马(php) 无需启用sho…

【C++】【Opencv】霍夫直线检测即cv::HoughLinesP()函数详解和示例

cv::HoughLinesP()&#xff08;函数霍夫直线&#xff09;功能分析是一种用于检测图像中直线的算法&#xff0c;它基于霍夫变换的原理。通过该算法&#xff0c;我们可以从图像中提取出直线信息&#xff0c;从而对图像进行分析和处理。主要经理边缘检测和霍夫直线处理两个步骤。本…

EDA实验-----4*4矩阵键盘与数码管显示测试(Quartus ‖)

目录 一、实验目的 二、实验仪器设备 三、实验原理 四、实验要求 五、实验步骤 六、实验报告 七、实验过程 1.矩阵键盘按键原理 2.数码管原理 3.分频器代码 4.电路图连接 5.文件烧录 一、实验目的 了解数码管的工作原理&#xff1b;掌握4*4矩阵键盘和数码管显示的编…

[python]python筛选excel表格信息并保存到另一个excel

目录 关键词平台说明背景所需库1.安装相关库2.代码实现sourcetarget1 关键词 python、excel、DBC、openpyxl 平台说明 项目Valuepython版本3.6 背景 从一个excel表中遍历删选信息并保存到另一个excel表 所需库 1.openpyxl &#xff1a;是一个用于读写 Excel 文件的 Pyt…

C/C++统计数 2021年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C统计数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C统计数 2021年12月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 给定一个数的序列S&#xff0c;以及一个区间[L, R], 求序列…

【C++入门到精通】新的类功能 | 可变参数模板 C++11 [ C++入门 ]

阅读导航 引言一、新的类功能1. 默认成员函数2. 类成员变量初始化3. 强制生成默认函数的关键字default4. 禁止生成默认函数的关键字delete5. override 和 final&#xff08;1&#xff09;override&#xff08;2&#xff09;final 二、可变参数模板递归函数方式展开参数包逗号表…

【c++随笔13】多态

【c随笔13】多态 多态性&#xff08;Polymorphism&#xff09;在面向对象编程中是一个重要概念&#xff0c;它允许以统一的方式处理不同类型的对象&#xff0c;并在运行时动态确定实际执行的方法或函数。一、什么是多态性&#xff1f;1、关键概念&#xff1a;C的多态性2、多态定…

3-docker安装centos7

CentOS7.9下安装完成docker后&#xff0c;后续我们可以在其上安装centos7系统。具体操作如下&#xff1a; 1.以root用户登录CentOS7.9服务器&#xff0c;拉取centos7 images 命令&#xff1a; docker pull centos:centos7 2.加载centos7 images并登录验证 命令&#xff1a;…

一种用于脑肿瘤和组织分割的具有体积特征对齐的三维跨模态特征交互网络

A 3D Cross-Modality Feature Interaction Network With Volumetric Feature Alignment for Brain Tumor and Tissue Segmentation 一种用于脑肿瘤和组织分割的具有体积特征对齐的三维跨模态特征交互网络背景贡献实验方法Cross-Modality Feature Interaction ModuleVolumetric …