微信小程序动态添加view组件的实例代码


Posted in Javascript onMay 23, 2019

在web中,我们动态添加DOM,可以用jQuery的方法,很简单。在微信小程序中怎么实现下面这么需求。

微信小程序动态添加view组件的实例代码

其中,里程数代表上一行到这一行地方的距离(这个不重要);要实现的就是点击增加途径地,就多一行,删除途径地,就少一行。

分析:添加的和删除的是同样的结构,只是数量不一样,所以考虑循环,用列表表示,增加就往这个列表push一个,删除就从列表pop一个。

主要代码如下:

<view class="weui-cell weui-cell_input">
 <view class="weui-cell__hd">
 <view class="weui-label rui-justify">
 <text space="ensp">出 发 地</text>
 </view>
 </view>
 <view class="weui-cell__bd">
 <input class="weui-input" name="beginAddress" bindinput="inputedit" data-obj="info" data-item="beginAddress" value="{{info.beginAddress}}"
 placeholder="请输入出发地" disabled="{{info.isPreDetail}}" />
 </view>
</view>
<view wx:for="{{info.details}}" wx:key="key" class="forItemBorder">
 <view class="weui-cell weui-cell_input ">
 <view class="weui-cell__hd">
 <view class="weui-label rui-justify">
 <text space="ensp">途 径 地</text>
 </view>
 </view>
 <input class="weui-input" id="place-{{index}}" bindinput="setPlace" placeholder="请输入途径地" />
 <input class="weui-input lcs" id="number-{{index}}" bindinput="setNumber" placeholder="里程数(km)" />
 </view>
</view>
<view class="weui-cell weui-cell_input">
 <view class="weui-cell__hd">
 <view class="weui-label rui-justify">
 <text space="ensp">目 的 地</text>
 </view>
 </view>
 <input class="weui-input" name="destination" bindinput="inputedit" data-obj="info" data-item="destination" value="{{info.destination}}"
 placeholder="请输入目的地" disabled="{{info.isPreDetail}}" />
 <input class="weui-input lcs" name="endLength" bindinput="inputedit" data-obj="info" data-item="endLength" value="{{info.endLength}}"
 placeholder="里程数(km)" disabled="{{info.isPreDetail}}" />
</view>
<view class="weui-cell" hidden="{{info.isPreDetail}}">
 <button type='primary' bindtap='addItem' style='width:50%;'>增加途径地</button>
 <button type='primary' bindtap='removeItem' style='width:50%;margin-left:5rpx;'>
 删除途径地
 </button>
</view>

因为添加删除的是相同的结构,所以我构造了一个类Detail来表示这个view

/**
 * Detail类 构造函数 
 * @param {string} placeName 途径地
 * @param {string} number 里程数
 */
function Detail(placeName, number) {
 this.placeName = placeName;
 this.number = number;
}
function Info() {
 this.details = [];
}
Page({
 data: {
 info: {}
 },
 init: function () {
 let that = this;
 this.setData({
  info: new Info(),
 });
 },
 onLoad: function (options) {
 this.init();
 },
 addItem: function (e) {
 let info = this.data.info;
 info.details.push(new Detail());
 this.setData({
  info: info
 });
 },
 removeItem: function (e) {
 let info = this.data.info;
 info.details.pop();
 this.setData({
  info: info
 });
 },

})

这时候,能对view动态增删了,那么对数据怎么处理,给每个生成的view添加id属性,通过id属性来判断操作的是哪个Detail类。js部分代码如下:

setPlace: function (e) {
 let index = parseInt(e.currentTarget.id.replace("place-", ""));
 let place = e.detail.value;
 let info = this.data.info;
 info.details[index].placeName = place;
 this.setData({
  info: info
 });
 },
setNumber: function (e) {
 let index = parseInt(e.currentTarget.id.replace("number-", ""));
 let number = e.detail.value;
 let info = this.data.info;
 info.details[index].number = number;
 this.setData({
  info: info
 });
 },

总结

以上所述是小编给大家介绍的微信小程序动态添加view组件的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript 编程引入命名空间的方法
Jun 29 Javascript
关于恒等于(===)和非恒等于(!==)
Aug 20 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
May 28 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
Mar 18 Javascript
jquery实现手机号码选号的方法
Jul 31 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
Apr 01 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
May 30 Javascript
纯js实现悬浮按钮组件
Dec 17 Javascript
Web前端框架Angular4.0.0 正式版发布
Mar 28 Javascript
详解JavaScript对象的深浅复制
Mar 30 Javascript
微信小程序 支付功能(前端)的实现
May 24 Javascript
Javascript生成器(Generator)的介绍与使用
Jan 31 Javascript
Vue+Element实现动态生成新表单并添加验证功能
May 23 #Javascript
vue elementui el-form rules动态验证的实例代码详解
May 23 #Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
May 23 #Javascript
使用vue自定义指令开发表单验证插件validate.js
May 23 #Javascript
微信小程序开发实现消息推送
Nov 18 #Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
May 23 #jQuery
js打开word文档预览操作示例【不是下载】
May 23 #Javascript
You might like
虫族 Zerg 热键控制
2020/03/14 星际争霸
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
Yii入门教程之目录结构、入口文件及路由设置
2014/11/25 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
Laravel使用支付宝进行支付的示例代码
2017/08/16 PHP
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
javascript针对DOM的应用实例(一)
2012/04/15 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
node.js中的querystring.stringify方法使用说明
2014/12/10 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
3种不同的ContextMenu右键菜单实现代码
2016/11/03 Javascript
JS操作xml对象转换为Json对象示例
2017/03/25 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
Python编程中的文件操作攻略
2015/10/16 Python
python 将字符串中的数字相加求和的实现
2019/07/18 Python
python使用原始套接字发送二层包(链路层帧)的方法
2019/07/22 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
python 将视频 通过视频帧转换成时间实例
2020/04/23 Python
Python使用pyenv实现多环境管理
2021/02/05 Python
Internet主要有哪些网络群组成
2015/12/24 面试题
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
超市重阳节活动方案
2014/02/10 职场文书
法律进机关实施方案
2014/03/12 职场文书
股份转让协议书
2014/04/12 职场文书
2014年质量工作总结
2014/11/22 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
Nest.js参数校验和自定义返回数据格式详解
2021/03/29 Javascript