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

news2024/11/14 19:46:53

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.coloradmin.cn/o/1228831.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows pgsql 数据库 数据目录更改

一.先停止postgres服务 cmd命令 services.msc找到服务停止 二.修改注册表 cmd命令 regedit找到路径 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x64-13 将“&#xff0d;D”后的目录名修改为新的数据目录位置即可&#xff0c;如果目录路径中含有…

【C++】泛型编程 ⑦ ( 类模板常用用法 | 类模板声明 | 类模板调用 | 类模板作为函数参数 )

文章目录 一、类模板基础用法1、类模板声明定义2、类模板使用3、类模板做函数参数 二、完整代码示例1、代码示例2、执行结果 一、类模板基础用法 1、类模板声明定义 上一篇博客中 , 【C】泛型编程 ⑥ ( 类模板 | 类模板语法 | 代码示例 ) 讲解了模板类的基础语法 , 模板类声明如…

23 - 如何优化JVM内存分配?

JVM 调优是一个系统而又复杂的过程&#xff0c;但我们知道&#xff0c;在大多数情况下&#xff0c;我们基本不用去调整 JVM 内存分配&#xff0c;因为一些初始化的参数已经可以保证应用服务正常稳定地工作了。 但所有的调优都是有目标性的&#xff0c;JVM 内存分配调优也一样。…

计算机网络的标准化工作及相关组织

一、国际化组织 计算机网络的标准化工作由一些主要的组织来进行管理和推动。以下是几个主要的计算机网络标准化的国际组织及其相关的标准&#xff1a; 1. 国际标准化组织&#xff08;ISO&#xff09;&#xff1a;国际标准化组织负责制定各种行业的标准&#xff0c;包括计算机…

Linux性能分析——TOP命令详解

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强公司&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …

网络割接用VRRP替换HSRP

如图3-11所示&#xff0c;C6500作为核心层设备上行连接出口路由器NE40E-X3&#xff0c;下行连接接入层设备CE6800。C6500上配置HSRP实现冗余备份网关&#xff0c;同时在二层网络部署MSTP破除环路。 总体思路 HSRP为CISCO私有协议&#xff0c;CE系列交换机&#xff08;以CE1280…

基于go标准分层架构项目设计实现

基于go标准分层架构项目设计实现 缘起 个人博客网址 最近主要看了两方面知识&#xff0c;一方面是技术相关的&#xff0c;如何设计一个比较好的后端架构项目代码&#xff1b;一方面是非技术相关的&#xff0c;如何写一篇好的技术文章&#xff0c;能够让他人读懂并有收获。因…

C++ 形参传值和传指针的误解

#include <stdio.h>void swap(int *x, int *y);main(){ int a 5, b 9;int *pp &a;int *kk &b;swap(pp, kk);printf("a%d\nb%d\n", *pp, *kk);return 0; } void swap(int *x, int *y) {int *t;t x;x y;y t; } 会发现&#xff0c;输出结果并没有…

iptables详解:常用模块的基本使用

目录 tcp扩展模块 multiport扩展模块 iprange扩展模块 connlimit模块 limit扩展模块 udp扩展模块 icmp扩展模块 state扩展模块 限制每分钟接收10个ICMP数据报文 允许10个数据报文快速通过&#xff0c;然后限制每分钟接收1个个ICMP数据报文 限制网络传输的带宽不可以…

VMware——WindowServer2012R2环境mysql5.7.14解压版安装主从复制(图解版)

目录 一、服务器信息二、192.168.132.33主服务器上安装mysql&#xff08;主&#xff09;2.1、环境变量配置2.2、安装2.2.1、修改配置文件内容2.2.2、初始化mysql并指定超级用户密码2.2.3、安装mysql服务2.2.4、启动mysql服务2.2.5、登录用户管理及密码修改2.2.6、开启远程访问 …

【论文复现】QuestEval:《QuestEval: Summarization Asks for Fact-based Evaluation》

以下是复现论文《QuestEval: Summarization Asks for Fact-based Evaluation》&#xff08;NAACL 2021&#xff09;代码https://github.com/ThomasScialom/QuestEval/的流程记录&#xff1a; 在服务器上conda创建虚拟环境questeval&#xff08;python版本于readme保持一致&…

Open AI开发者大会:AI“科技春晚”

ChatGPT的亮相即将满一年之时&#xff0c;OpenAI举行了自己的首次开发者大会。OpenAI首席执行官Sam Altman宣布推出最新的大模型GPT-4 Turbo。正如“Turbo”一词的中文含义“涡轮增压器”一样&#xff0c;本次发布会上&#xff0c;OpenAI的这款最新大模型在长文本、知识库、多模…

【计算思维】蓝桥杯STEMA 科技素养考试真题及解析 3

1、下图中&#xff0c;乐乐家的位置用数对&#xff08;4,3&#xff09;表示&#xff0c;学校在乐乐家西南方向。下列选项中&#xff0c;学校的位置不可能是 A、&#xff08;5,4&#xff09; B、&#xff08;2,2&#xff09; C、&#xff08;2,1&#xff09; D、&#xff…

进程之理解进程的概念

你必须非常努力&#xff0c;才能看起来毫不费力。文章目录 进程的基本概念描述进程——pcbtest_struct pcb的一种task_struct 内容分类 组织进程查看进程通过系统调用获取进程标示符总结 进程的基本概念 课本概念&#xff1a;进程是一个执行实列&#xff0c;正在执行的程序等。…

数据结构 堆

手写堆&#xff0c;而非stl中的堆 如何手写一个堆&#xff1f; //将数组建成堆 <O(n) for (int i n / 2;i;i--) //从n/2开始down down(i); 从n/2元素开始down&#xff0c;最下面一层元素的个数是n/2&#xff0c;其余上面的元素的个数是n/2&#xff0c;从最下面一层到最高层…

【汇编】[bx+idata]的寻址方式、SI和DI寄存器

文章目录 前言一、[bxidata]寻址方式1.1 [bxidata]的含义1.2 示例代码 二、SI和DI寄存器2.1 SI和DI寄存器是什么&#xff1f;2.2 [bxsi]和[bxdi]方式寻址2.3 [bxsiidata]和[bxdiidata] 总结 前言 在汇编语言中&#xff0c;寻址方式是指指令如何定位内存中的数据。BX寄存器与偏…

滚雪球学Java(09-5):Java中的赋值运算符,你真的掌握了吗?

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

拷贝对象时编译器的一些优化

在传参和传值返回的过程中&#xff0c;编译器会通过一些优化减少拷贝的次数。 class A { public:A():_a(1){cout << "A()" << endl;}A(const A& aa):_a(aa._a){cout << "A(const A& aa)" << endl;}A& operator(const …

【原创】WeChat Server搭建

功能 微信公众号的后端&#xff0c;为其他系统提供微信登录验证功能 源码地址 https://github.com/songquanpeng/wechat-server 创建MySQL数据库 宝塔\数据库\MySQL 添加数据库 数据库名&#xff1a;wechat_server 用户名&#xff1a;wechat_server 密码&#xff1a;fZNB…

商业化三年,OceanBase在忙什么?

文&#xff5c;刘雨琦 2020年&#xff0c;国产数据库厂商OceanBase&#xff08;以下简称OB&#xff09;商业化的第一年&#xff0c;只有18个客户。 如何打开局面&#xff0c;让这个从蚂蚁场景中走出来的数据库活下去&#xff0c;并进入到更多的场景里&#xff0c;发挥更大的价…