业务场景
通过点击按钮将表中一条数据渲染到模板中保存为pdf
问题
因为我的打印元素开始是隐藏的,调起保存时才让它显示,保存后再让它隐藏,
这个时候就会发生一个问题,保存下来的是被渲染成隐藏的html,什么都没有。这是因为异步导致的,html2canvans还没转译完的时候就已经被渲染隐藏了。
解决:给函数加上同步,用Promise封装转译保存过程,这样在主函数中通过await 等待保存完成后执行隐藏操作。
//首先需要引入html2cavans 和 jspdf
async function renderPrescriptionInfo(type,data) {
// console.log(data)
var data = data
data.createTime = layui.util.toDateString(data.createTime, 'yyyy-MM-dd');
//获取需要打印的元素
var getTpl = document.getElementById("prescription").innerHTML
, view = document.getElementById('prescription1Html');
laytpl(getTpl).render(data,async function (html) {
view.innerHTML = html;
var flag = false;
if(type==='print'){
$('#main').addClass('layui-hide');
$('#printDiv').removeClass('layui-hide');