微信小程序动态添加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 相关文章推荐
非常不错的功能强大代码简单的管理菜单美化版
Jul 09 Javascript
JavaScript脚本性能优化注意事项
Nov 18 Javascript
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
Mar 03 Javascript
让图片旋转任意角度及JQuery插件使用介绍
Mar 20 Javascript
js和php如何获取当前url的内容
Sep 22 Javascript
jQuery+ajax实现动态执行脚本的方法
Jan 27 Javascript
JS实现的网页倒计时数字时钟效果
Mar 02 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
Oct 01 Javascript
正则 js分转元带千分符号详解
Mar 08 Javascript
值得收藏的vuejs安装教程
Nov 21 Javascript
使用layui 渲染table数据表格的实例代码
Aug 19 Javascript
vue+elementUI实现图片上传功能
Aug 20 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
PHP Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
本地计算机无法启动Apache故障处理
2014/08/08 PHP
PHP生成树的方法
2015/07/28 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
php实例化一个类的具体方法
2019/09/19 PHP
比较新旧两个数组值得增加和删除的JS代码
2013/10/30 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
2014/11/23 Javascript
jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
2016/01/23 Javascript
jQuery EasyUI 入门必看
2016/06/03 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
基于BootStrap实现局部刷新分页实例代码
2016/08/08 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
JS中如何实现点击a标签返回页面顶部的问题
2017/01/19 Javascript
js 输入框 正则表达式(菜鸟必看教程)
2017/02/19 Javascript
AngularJS自定义表单验证功能实例详解
2018/08/24 Javascript
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
python改变日志(logging)存放位置的示例
2014/03/27 Python
Django 路由系统URLconf的使用
2018/10/11 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
python实现的登录与提交表单数据功能示例
2019/09/25 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
Python3标准库之functools管理函数的工具详解
2020/02/27 Python
2014年客服工作总结与计划
2014/12/09 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
2015年幼儿教师个人工作总结
2015/05/20 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
初中运动会前导词
2015/07/20 职场文书