微信小程序动态添加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 相关文章推荐
动态修改DOM 里面的 id 属性的弊端分析
Sep 03 Javascript
jQuery 标题的自动翻转实现代码
Oct 14 Javascript
jquery异步跨域访问代码
Jun 28 Javascript
Javascript中innerHTML用法实例分析
Jan 12 Javascript
在Javascript中处理字符串之big()方法的使用
Jun 08 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
Jan 12 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
Feb 13 Javascript
Node.js的进程管理的深入理解
Jan 09 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
Apr 26 Javascript
Vue 3.x+axios跨域方案的踩坑指南
Jul 04 Javascript
layer弹出层自定义提交取消按钮的例子
Sep 10 Javascript
详解小程序BackgroundAudioManager踩坑之旅
Dec 08 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
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
php 中include()与require()的对比
2006/10/09 PHP
PHP中的output_buffering详细介绍
2014/09/27 PHP
使用PHP接受文件并获得其后缀名的方法
2015/08/05 PHP
PHP数据库表操作的封装类及用法实例详解
2016/07/12 PHP
PHP实现统计在线人数功能示例
2016/10/15 PHP
用函数式编程技术编写优美的 JavaScript
2006/11/25 Javascript
jquery tools之tooltip
2009/07/25 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
2015/07/27 Javascript
Javascript连接Access数据库完整实例
2015/08/03 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
2016/10/10 Javascript
Bootstrap模态框使用详解
2017/02/15 Javascript
Node.js  事件循环详解及实例
2017/08/06 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
JavaScript反射与依赖注入实例详解
2018/05/29 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
Python 面向对象 成员的访问约束
2008/12/23 Python
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
Spark处理数据排序问题如何避免OOM
2020/05/21 Python
python怎么判断模块安装完成
2020/06/19 Python
Saucony澳大利亚官网:美国跑鞋品牌,运动鞋中的劳斯莱斯
2018/05/05 全球购物
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
办公室主任岗位职责
2013/11/08 职场文书
民族团结先进个人材料
2014/02/05 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
学生违反校规检讨书
2014/10/28 职场文书
公司借条范本
2015/05/25 职场文书
致接力运动员加油稿
2015/07/21 职场文书
餐馆开业致辞
2015/08/01 职场文书
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL