读取HTMLCollection列表的length为0

二维码打包的时候 需要for循环一直显示domCls为空,但是又能打印出domCls

downloadZip 方法里添加定时器

 <!-- 二维码 -->
<div id="ziptable" style="visibility:hidden;">
  <Qrcode
    :qrUrl="item.qrCode"
    :qrText="item.typeTranslation"
    v-for="item in qrCodelist"
    :key="item.type"
  ></Qrcode>
</div>
//methods里调用接口

downloadcode(row) {
  getVerificationCode(this.$qs.stringify({ memberId: row.id })).then(
    res => {
      if (res.code == 200) {
        this.qrCodelist = res.result;
        this.downloadZip();
      }
    }
  );
},

// 压缩并下载二维码

downloadZip() {
  setTimeout(() => {
    let dom = [];
    let domCls = document
      .getElementById("ziptable")
      .getElementsByClassName("qrcode_box");
    console.log(domCls, domCls.length);
    for (let index = 0; index < domCls.length; index++) {
      dom.push(domCls[index].getElementsByClassName("canvas")[0]);
    }
    let zip = new JSZip();
    let img = zip.folder("");
    for (let index = 0; index < dom.length; index++) {
      img.file(
        `${this.qrCodelist[index].typeTranslation}${this.qrCodelist[index].qrCode}.png`,
        dom[index]
          .toDataURL("img/png")
          .substring(dom[index].toDataURL("img/png").indexOf(",") + 1),
        { base64: true }
      );
    }
    // 图片是base64格式, 但不要base64前缀;
    zip.generateAsync({ type: "blob" }).then(function(content) {
      FileSaver.saveAs(content, "投递码.zip");
    });
  }, 200);
},

 上网查阅发现问题可能是由于mounted 不会承诺所有的子组件也都一起被挂载。

这个时候dom元素还有没挂载完毕。如果你希望等到整个视图都渲染完毕,可以用 vm.$nextTick 替换掉 mounted:

mounted () {
  this.$nextTick(() => {

  })
},

但是不清楚为什么使用了这个方法后获取的length依旧为0。

问题

在mounted阶段,获取Element对象,console.log()可以读取出列表,而却无法读出它的length。

注意 mounted 不会承诺所有的子组件也都一起被挂载。如果你希望等到整个视图都渲染完毕,可以用 vm.$nextTick 替换掉 mounted:

mounted: function () {
 this.$nextTick(function () {
  // Code that will run only after the
  // entire view has been rendered
 })
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值