-
2018-11-20 15:26:46
之前用vue写了一个表格组件,一个页面最多会循环出来20个表格,每个表格都有会发请求,差不多20个请求一起发出,数据库不干了,所以就想在一个表格请求完再请求下一个表格。
这就用了传说中的promise,前面稍微解释一下promise,后面直接贴代码
Promise其实是一个构造函数,自带有all、reject、resolve这几个方法,用的时候有then、catch这俩方法
一、先来new一个
var p = new Promise(function(resolve, reject){ //做一些异步操作(可以是一个post请求) setTimeout(function(){ console.log('执行!'); resolve('数据'); }, 2000); });
Promise的构造函数接收一个参数,是函数,并且传入两个参数:resolve,reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数。其实这里用“成功”和“失败”来描述并不准确,按照标准来讲,resolve是将Promise的状态置为fullfiled,reject是将Promise的状态置为rejected,现在不用太纠结这个
运行,两秒之后输出“执行!”,并没用调用,new以后就自动执行了,所以promise需要包在函数里,需要的时候再调用
function runAsync(){ var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.log('执行!'); resolve('数据'); }, 2000); }); return p; } runAsync()
包装好之后,还是不知道怎么实现最初的需求,而且resolve(‘数据’);不知道什么意思
包装好的函数最后,会return出Promise对象,也就是说,执行这个函数我们得到了一个Promise对象。还记得Promise对象上有then、catch方法吧?这就是强大之处了
二、来调用一下
runAsync().then(function(data){ console.log(data); //这里的data,就是刚刚resolve('数据');括号里传过来的东西 //后面可以用传过来的数据做些其他操作 //...... });
运行,会输出“执行!”,接着输出“数据”
所以能看出来,then其实就是我们在promise的异步操作的回调,现在就是把异步操作和回调分开写了,在一步操作之后,链式执行回调。这个时候会有疑问,不用promise,直接在setTimeout里调用runAsync().then里的函数不就好了,所以就用到了promise的最厉害的链式操作
runAsync1() .then(function(data){ console.log(data); return runAsync2(); }) .then(function(data){ console.log(data); return runAsync3(); }) .then(function(data){ console.log(data); });
runAsync1、runAsync2、runAsync3这三个函数都是如何定义的?
function runAsync1(){ var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.log('异步任务1执行!'); resolve('数据1'); }, 1000); }); return p; } function runAsync2(){ var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.log('异步任务2执行!'); resolve('数据2'); }, 2000); }); return p; } function runAsync3(){ var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.log('异步任务3执行!'); resolve('数据3'); }, 2000); }); return p; }
就是上面这样,第一个异步操作之后执行第二个,第二个之后执行第三个,当然如果异步操作一样的话,可以自己调用自己,也就是写个递归,后面贴代码
在then方法中,你也可以直接return数据而不是Promise对象,在后面的then中就可以接收到数据了,比如:
runAsync1() .then(function(data){ console.log(data); return runAsync2(); }) .then(function(data){ console.log(data); return '直接返回数据'; //这里直接返回数据 }) .then(function(data){ console.log(data); });
运行,结果是:
异步任务1执行!
数据1
异步任务2执行!
数据2
直接返回数据关于reject的用法
function isAdult(){ var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ var age = Math.ceil(Math.random()*30); //生成1-30的随机数 if(age>=18){ resolve(age); } else{ reject('还没成年'); } }, 2000); }); return p; } isAdult().then( function(data){ console.log('resolved'); console.log(data); }, function(reason, data){ console.log('rejected'); console.log(reason); } );
isAdult
函数用来异步得到一个数字,2秒后执行完成,如果数字小于等于18,我们认为是“成功”了,调用resolve修改Promise的状态。否则我们认为是“失败”了,调用reject并传递一个参数,作为失败的原因。关于catch的用法
Promise对象除了then方法,还有一个catch方法,它是做什么用的呢?其实它和then的第二个参数一样,用来指定reject的回调,用法是这样:
isAdult() .then(function(data){ console.log('resolved'); console.log(data); }) .catch(function(reason){ console.log('rejected'); console.log(reason); });
效果和写在then的第二个参数里面一样。不过它还有另外一个作用:在执行resolve的回调(也就是上面then中的第一个参数)时,如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法中。
三、代码
//封装一个Promise函数 tablePromise(tableIndex){ var p = new Promise(function(resolve, reject){ //做一些异步操作 this.$post(this.basePath + 'table_data').then(data => { resolve(data.data) }); }); return p; }, //调用封装的方法 getTable(){ this.tableIndex++ tablePromise(this.tableIndex).then(function (data) { this.dataList.push(data) if(this.tableIndex< this.list.length){ this.getTable() //这里做递归 } }) }
更多相关内容 -
layui同一个页面使用多个数据表格时的注意点
2018-06-29 17:19:14这个页面属于是layui的tabs模块和datatable的结合,我主要犯的错误是在生成表格的时候,控件名称一样 <!DOCTYPE html> <html lang="zh-CN" xmlns:th="...这个页面属于是layui的tabs模块和datatable的结合,我主要犯的错误是在生成表格的时候,控件名称一样
<!DOCTYPE html> <html lang="zh-CN" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8" /> <title>新增</title> <meta name="renderer" content="webkit"/> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" /> <meta name="apple-mobile-web-app-status-bar-style" content="black" /> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="format-detection" content="telephone=no" /> <head th:replace="common/commonHTML :: listCommonCSSJS"></head> <link rel="stylesheet" th:href="@{/layui/css/layui.css}"/> <script type="text/javascript" th:src="@{/layui/layui.all.js}"></script> <style type="text/css"> @media(max-width:1240px){ .layui-form-item .layui-inline{ width:100%; float:none; } } .layui-form-item .layui-inline{ width:33.333%; float:left; margin-right:0; } </style> </head> <body style="margin-left:10px;background-color:white"> <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> <ul class="layui-tab-title"> <li class="layui-this" id="wx1">微信登录日志</li> <li id="scan2">视频点击日志</li> </ul> <div class="layui-tab-content"> <div class="layui-tab-item layui-show"> <blockquote class="layui-elem-quote news_search" style="background-color:white;"> <form class="layui-form" action=""> <div class="layui-inline"> <div class="layui-input-inline" style="margin-right:10px;width:150px;margin-top:5px;"> <input placeholder="用户名" class="layui-input search_input" type="text" id="name_w" name="invoiceTitle" /> </div> <div class="layui-inline" style="margin-top:5px;width:170px;"> <input type="text" class="layui-input" id="startDate_w" placeholder="登录时间区间(前)"/> </div> <div class="layui-inline" style="margin-top:5px;width:170px;"> <input type="text" class="layui-input" id="endDate_w" placeholder="登录时间区间(后)"/> </div> <div class="layui-input-inline" style="margin-right:10px;width:150px;margin-top:5px;"> <input placeholder="手机号" class="layui-input search_input" type="text" id="loginTel_w" name="loginTel" /> </div> <div class="layui-input-inline" style="margin-right:10px;width:150px;margin-top:5px;"> <input placeholder="微信名" class="layui-input search_input" type="text" id="wxNum_w" name="wxNum" /> </div> </div> <div class="layui-inline" style="margin-top:5px;"> <a class="layui-btn search_btn" data-type="reload" id="searchWXData"><i class="layui-icon"></i>查询</a> </div> </form> </blockquote> <div class="layui-form news_list" style="margin-top:25px;"> <table id="wx" lay-filter="wxDataTable" class="layui-table" lay-data="{id:'wxLoginDataReload'}"> <thead> <tr> <th lay-data="{field:'name',width:220}">用户名</th> <th lay-data="{field:'loginTel',width:220}">手机号</th> <th lay-data="{field:'wxName',width:220}">微信名</th> <th lay-data="{field:'operateDate',width:250}">登录日期</th> <th lay-data="{field:'loginType',width:220}">登录方式</th> </tr> </thead> </table> </div> </div> <div class="layui-tab-item"> <div class="layui-tab-item layui-show"> <input type="hidden" id="mo" value="1"/> <blockquote class="layui-elem-quote news_search" style="background-color:white;"> <form class="layui-form" action=""> <div class="layui-inline"> <div class="layui-input-inline" style="margin-right:10px;width:150px;margin-top:5px;"> <input placeholder="用户名" class="layui-input search_input" type="text" id="name_s" name="invoiceTitle" /> </div> <div class="layui-inline" style="margin-top:5px;width:170px;"> <input type="text" class="layui-input" id="startDate_s" placeholder="观看视频时间区间(前)"/> </div> <div class="layui-inline" style="margin-top:5px;width:170px;"> <input type="text" class="layui-input" id="endDate_s" placeholder="观看视频时间区间(后)"/> </div> <div class="layui-input-inline" style="margin-right:10px;width:150px;margin-top:5px;"> <input placeholder="手机号" class="layui-input search_input" type="text" id="loginTel_s" name="loginTel" /> </div> <div class="layui-input-inline" style="margin-right:10px;width:150px;margin-top:5px;"> <input placeholder="微信名" class="layui-input search_input" type="text" id="wxNum_s" name="wxNum" /> </div> </div> <div class="layui-inline" style="margin-top:5px;"> <a class="layui-btn search_btn" data-type="reload" id="searchScanData"><i class="layui-icon"></i>查询</a> </div> </form> </blockquote> <div class="layui-form news_list" style="margin-top:25px;"> <table id="scan" lay-filter="scanRecordTable" class="layui-table" lay-data="{id:'scanRecordDataReload'}"> <thead> <tr> <th lay-data="{field:'name',width:150}">用户名</th> <th lay-data="{field:'tel',width:140}">手机号</th> <th lay-data="{field:'wxNum',width:150}">微信名</th> <th lay-data="{field:'fillDate',width:170}">视频观看时间</th> <th lay-data="{field:'process',width:130}">课程分类</th> <th lay-data="{field:'childType',width:160}">课程子类</th> <th lay-data="{field:'resourceTitle',width:230}">课程名称</th> </tr> </thead> </table> </div> </div> </div> </div> </div> </body> <script type="text/javascript"> layui.use('laydate', function(){ var laydate = layui.laydate; laydate.render({ elem: '#startDate_w',//指定元素 type: 'datetime', format:'yyyy-MM-dd HH:mm:ss', theme: 'grid' }); laydate.render({ elem: '#endDate_w',//指定元素 type: 'datetime', format:'yyyy-MM-dd HH:mm:ss', theme: 'grid' }); laydate.render({ elem: '#startDate_s',//指定元素 type: 'datetime', format:'yyyy-MM-dd HH:mm:ss', theme: 'grid' }); laydate.render({ elem: '#endDate_s',//指定元素 type: 'datetime', format:'yyyy-MM-dd HH:mm:ss', theme: 'grid' }); }); var tableOptions = { url : '/loginRecord/getWxLoginLogPageData', method : 'POST', id : 'wxLoginDataReload', page : true } var tableOptions_s = { url : '/loginRecord/getScanRecordPageData', method : 'POST', id : 'scanRecordDataReload', page : true } layui.use('table', function() {//layui 模块引用,根据需要自行修改 var layer = layui.layer, tablew = layui.table;//注意控件table的名称要改变 var createTable = function() { tablew.init('wxDataTable', tableOptions); } createTable(); // 查询 $('#searchWXData').on('click', function() { tablew.reload("wxLoginDataReload", { // 此处是上文提到的 初始化标识id where : { name : $("#name_w").val().trim(), loginTel : $("#loginTel_w").val().trim(), wxName : $("#wxNum_w").val().trim(), startDate:$("#startDate_w").val().trim(), endDate:$("#endDate_w").val().trim() }, page : { curr : 1 } }); }); }); layui.use('element', function(){ var element = layui.element; //获取hash来切换选项卡,假设当前地址的hash为lay-id对应的值 var layid = location.hash.replace(/^#docDemoTabBrief=/, ''); element.tabChange('docDemoTabBrief', layid); //假设当前地址为:http://a.com#test1=222,那么选项卡会自动切换到“发送消息”这一项 //监听Tab切换,以改变地址hash值 element.on('tab(docDemoTabBrief)', function(){ location.hash = 'docDemoTabBrief='+ this.getAttribute('lay-id'); layui.use('table', function() {//layui 模块引用,根据需要自行修改 var layer = layui.layer, tables = layui.table; var createTable = function() { tables.init('scanRecordTable', tableOptions_s); } createTable(); // 查询 $('#searchScanData').on('click', function() { tables.reload("scanRecordDataReload", { // 此处是上文提到的 初始化标识id where : { name : $("#name_s").val().trim(), tel : $("#loginTel_s").val().trim(), wxNum : $("#wxNum_s").val().trim(), startDate:$("#startDate_s").val().trim(), endDate:$("#endDate_s").val().trim() }, page : { curr : 1 } }); }); }); }); }); </script> <!-- <script type="text/javascript" th:src="@{/js/loginRecord/loginRecord.js}"></script> --> </html>
-
EXCEL工作簿中多个工作表如何另存其中一个
2019-05-13 15:29:422、打开excel2016版软件以后,为了更好的示范编辑2个任意文字的工作表; 3、编辑好文字以后,在表2的工作表标签,点击鼠标右键并在下拉选项中选择“移动或复制”; 4、在弹出的对话框中,上面选择新工作簿,... -
python 发送邮件/正文插入表格
2021-10-14 17:42:12##将写入本地的excel文件发送至目标邮箱,并读取前7行7列做展示 #邮件发送方,收件方,数据为数据[[1,2],[1,3]]这种数组格式的,邮件主题,发送方密码 # sendAddr = '' # recipientAddrs = '' # email_subject = ''...#邮件发送方,收件方,数据为数据[[1,2],[1,3]]这种数组格式的,邮件主题,发送方密码 # sendAddr = '' # recipientAddrs = '' # email_subject = '' # password = '' def send_mail_excel(sendAddr,recipientAddrs,alarm_nodes,email_subject,password): pd.set_option('display.max_colwidth', -1) columns = ['节点id','节点名称','最后重跑时间','失败次数'] filter_merge_data = pd.DataFrame(alarm_nodes, columns=columns) df_html = filter_merge_data.to_html(escape=False) # DataFrame数据转化为HTML表格形式 head = \ """ <head> <meta charset="utf-8"> <STYLE TYPE="text/css" MEDIA=screen> table.dataframe { border-collapse: collapse; border: 2px solid #a19da2; /*居中显示整个表格*/ margin: auto; } table.dataframe thead { border: 2px solid #91c6e1; background: #f1f1f1; padding: 10px 10px 10px 10px; color: #333333; } table.dataframe tbody { border: 2px solid #91c6e1; padding: 10px 10px 10px 10px; } table.dataframe tr { } table.dataframe th { vertical-align: top; font-size: 14px; padding: 10px 10px 10px 10px; color: #105de3; font-family: arial; text-align: center; } table.dataframe td { text-align: center; padding: 10px 10px 10px 10px; } body { font-family: 宋体; } h1 { color: #5db446 } div.header h2 { color: #0002e3; font-family: 黑体; } div.content h2 { text-align: center; font-size: 28px; text-shadow: 2px 2px 1px #de4040; color: #fff; font-weight: bold; background-color: #008eb7; line-height: 1.5; margin: 20px 0; box-shadow: 10px 10px 5px #888888; border-radius: 5px; } h3 { font-size: 22px; background-color: rgba(0, 2, 227, 0.71); text-shadow: 2px 2px 1px #de4040; color: rgba(239, 241, 234, 0.99); line-height: 1.5; } h4 { color: #e10092; font-family: 楷体; font-size: 20px; text-align: center; } td img { /*width: 60px;*/ max-width: 300px; max-height: 300px; } </STYLE> </head> """ body = \ """ <body> <div align="center" class="header"> <!--标题部分的信息--> <h1 align="center">表格中的数据为当天运行失败超过6次的节点,请查看运维中心处理</h1> </div> <hr> <div class="content"> <!--正文内容--> <h2> </h2> <div> <h4></h4> {df_html} </div> <hr> <p style="text-align: center"> </p> </div> </body> """.format(yesterday='20211012', df_html=df_html) html_msg = "<html>" + head + body + "</html>" html_msg = html_msg.replace('\n', '').encode("utf-8") msg = email.mime.multipart.MIMEMultipart() msg['from'] = sendAddr msg['to'] = recipientAddrs # 多个收件人的邮箱应该放在字符串中,用字符分隔, 然后用split()分开,不能放在列表中, 因为要使用encode属性 msg['subject'] = email_subject msg.attach(MIMEText(html_msg, "html", "utf-8")) smtpHost = 'smtp.exmail.qq.com' port = 465 smtp = smtplib.SMTP_SSL(smtpHost, port) # 需要一个安全的连接,用SSL的方式去登录得用SMTP_SSL,之前用的是SMTP().端口号465或587 smtp.login(sendAddr, password) # 发送方的邮箱,和授权码(不是邮箱登录密码) smtp.sendmail(sendAddr, recipientAddrs.split(";"), str(msg)) # 注意, 这里的收件方可以是多个邮箱,用";"分开, 也可以用其他符号 smtp.quit()
效果图
-
excel怎么实现多人共同编辑一个文档
2021-02-11 23:06:51针对“ excel怎么实现多人共同编辑一个文档 ”的问题,下面由一级教师-李微竹为您解答:非常多时候我们也许需要多人在相同个Excel图表中进行编辑,可是当一个人在编辑的时候,另一个人打开则只能是只读,不能编辑,... -
bootstrap-table一个页面两个数据表格,同时加载,相互影响
2018-08-02 17:30:43从异步请求的执行原理来看,我们知道当一个异步请求发送时,浏览器不会处于锁死、等待的状态,从一个异步请求发送到获取响应结果的期间,浏览器还可以进行其它的操作。这就意味着多个异步请求的执行时并行的。 两个... -
使用html表格发送邮件--四个好看的CSS样式表格(二)
2019-08-13 17:18:17这是一个很常用的表格样式。 源码: <!-- CSS goes in the document HEAD or added to your external stylesheet --> <style type="text/css"> table.gridtable { font-family: verdana,arial,s..... -
springboot 实现html模板表格以及附件混合邮件发送的方法
2019-06-28 16:13:06最近接手一个邮件发送的功能,这里记录下,供以后需要时查看或在次基础上优化开发 1.首先是添加springboot-mail的依赖包 <!--springboot-mail整合包--> <dependency> <groupId>org.spring... -
如何实现:每天收集数据到表格,但只看到当天的数据?
2017-05-27 14:35:43提问如何实现:每天收集数据到表格,但只看到当天的数据?第一种情况:我让别人填写数据,但TA只会看到当天的数据,昨天的数据不用看到。第二种情况:我作为表格创建者,只要看到当天的数据,但也可以选择看到所有... -
json的格式、存储与发送以及多个Json的处理
2018-06-05 14:37:331.Json的格式 ...json是一种轻量级的存储和交换信息的语言。他有自己的格式。 较为简单的json。里面只有简单的对象,key+value的形式: var CellInfo = { "CellId": document.getElementB... -
能查快递单号轨迹?我用的一定是个假表格
2017-02-20 15:32:19超级表格目前已经支持在表格中输入快递单号之后直接在表格中显示快递轨迹。赶快来尝试一下吧~ -
excel vba 批量发送邮件邮件内容放入表格指定主题
2019-03-06 16:29:31最近工作中遇到同事经常要发送销售日报之类的,邮件内容极为相似, 发送内容有:邮件主题,报表,报表附件,发送抄送不同人员。 本分享实现内容,可以填入不同...B9:c16填写邮件接收人、抄送人员邮箱,多个接收人用... -
python读取EXCEL每个sheet页内容,并转为JSON格式,发送请求
2021-12-21 11:12:22python读取EXCEL每个sheet页各行各列内容,并转为JSON格式,发送请求 -
钉钉如何群里定时发送文件_使用钉钉APP实现多人在线协同编辑文档
2020-10-27 19:10:33使用钉钉进行对文档的多人在线协同编辑是一种非常便捷的办公应用。钉钉支持电脑端、手机端等多平台操作。下面以手机端钉钉aPP为例,了解使用钉钉进行多人线上协同编辑文件的方法。1、 使用手机登录钉钉APP,打开钉钉... -
福利来了!Eexcel功能由你决定!什么?表格只需点两下就做好了?
2021-01-26 23:15:08福利来源Excel一直是数据分析报表制作的重要工具,作为一个重度用户,可能要在Excel多次的调整字体字号、调整边框和设置单元格格式等等,这些都是重复性的机械过程。为了提高Excel中对数据报表的处理效率,我们需要... -
MS SQL Server结果生成HTML表格并发送邮件
2017-06-27 11:17:29配置邮件服务器 在SQL管理器中找到“管理”,在“数据库邮件”上面右键,选择“配置数据库邮件”,如果没有...使用SQL的XML功能生成表格,需要格式的话可以使用Style来设置,示例: DECLARE @emailBody NVARCHAR -
JavaScript中一个方法同时发送两个ajax请求问题
2018-10-26 13:26:29今天写程序时遇到这样一个... 从异步请求的执行原理来看,我们知道当一个异步请求发送时,浏览器不会处于锁死、等待的状态,从一个异步请求发送到获取响应结果的期间,浏览器还可以进行其它的操作。这就意味着多... -
用JSP创建一个表格模板
2013-11-28 09:04:16考虑到复用性,笔者用jsp编写了一个表格模板,可以从request中获取List封装的数据,然后通过JSTL结合EL表达式填充到模板。最后完成的jsp文件可以作为一个单独的模块,嵌入到任意其它jsp页面需要的位置。 首先是... -
前端 传表格多条数据 给后台接收 (HTML前端表格多条数据JSON封装后;异步提交到后台处理)
2018-04-27 13:14:58前端 传表格多条数据 给后台接收 (HTML前端表格多条数据JSON封装后;异步提交到后台处理) 1.多条数据采用checkBox 携带 //封装数据的对象 var PayObj = { O_NBR:"", P_NBR:"", O_AMOUNT:"" , P... -
3分钟学会如何将表格、表单打包共享
2016-11-02 10:00:42: 一个链接多个页面 同一链接不同权限 「超级表格微视频」第八期 提升效率、 增强免疫力,尽在超级表格微视频! 请关注每周的公众号更新,3分钟让您玩转超级表格! 关于超表应用…… 搜索 1.新建应用 登录超级表格... -
用JSP创建一个表格模板 .
2013-12-03 22:30:04考虑到复用性,笔者用jsp编写了一个表格模板,可以从request中获取List封装的数据,然后通过JSTL结合EL表达式填充到模板。最后完成的jsp文件可以作为一个单独的模块,嵌入到任意其它jsp页面需要的位置。 首先... -
Java一个汉字占几个字节(详解与原理)(转载)
2019-05-29 23:33:35今天学习Netty做定长消息发送时,发现到UTF-8编码下的中文并非两个字节,是三个字节,omg~,遂翻了篇博客后才发现原来java中文对应的字节长度还有这么多说道,涨姿势了,咳咳~ 原文如下: 忒长了,原文作者大大辛苦... -
【办公效率篇】将全校所有学生成绩的Excel总表,按名字拆分为数个单独的Excel表点对点地发送给每个学生
2020-09-07 21:37:25这里以考试成绩举例,教大家将全校所有学生成绩的Excel总表,按名字拆分为数个单独的Excel表,以便点对点地发送给每位学生。 总成绩表如下,每个学生有上下两学期的成绩: 如何按名字拆分为数个单独的Excel表?代码... -
【知识整理】多次快速请求同一数据接口时,由于请求返回的时间原因导致数据渲染混乱的web前端解决方案
2019-10-08 13:35:28这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持... -
Python实现自动发送邮件(详解)
2020-12-16 12:21:21Python实现自动发送邮件 1.开启SMTP服务 为了实现自动发送邮件的目的,...smtplib和email,这俩模块是python自带的,只需import即可使用。smtplib模块主要负责发送邮件,email模块主要负责构造邮件。 smtplib模块主要 -
表格常用标签及属性(表格标签基本使用,表格结构和常用列表,自定义列表和表单,表单输入,表单输入)
2021-12-16 17:45:361. 表格常用标签及属性 1.1 表格标签基本使用 表格的主要作用是什么? 以行、列的方式(表格)整齐地展示数据,例如:股票价格 ...常用的表格标签有几个?分别代表什么含义? 三个基本的表格标签: 序号 标签名 说 -
语雀新表格——数据表
2021-12-01 10:46:41语雀数据表是一种全新的表格类型,它与传统的 excel 或者语雀表格最大的不同之处在于,数据表的每一个字段的数据格式是固定的。 目前,语雀数据表已经支持了单行文本、多行文本、数字、图片等 14 种内容类型。 那么... -
jqgrid表格连续触发两次reload,但是只发起了一次请求,看network里面也只发起了一次
2017-07-25 01:23:08自己写有一个加载表格的函数,函数里面包含以下代码: if(!isFirstloadGrid) { console.log("表格重载"+url) $(gridOfClientContact).jqGrid('clearGridData'); $(gridOfClientContact)... -
vue结合Element UI如何实现表格数据的新增操作
2020-02-07 22:35:07在Element UI中,实现新增操作,需要弹出一个对话框,可以使用Dialog对话框组件。在data中,我们需要定义一个数据dialogVisible,它的作用是控制添加用户对话框的显示与隐藏,默认为隐藏,也就是不展示,代码如下: ... -
微信小程序:表格的实现
2020-12-29 06:05:12一个在微信小程序中创建表格的demo效果图最后做出来大概就是这个样子的,先看下设计图:(画的真好看)设计图然后再看下数据返回的格式:数据返回格式这数据...o.0...分析数据得知,后台返回的数据远比设计图上描绘的...