VUE中,HTML对象的ID动态绑定,在mounted中根据ID无法获取到对象

页面如下:

<template>
    <div :id="objId" class="randomBoxDiv" :style="stylesBox">
    </div>
</template>

其中,div的ID是动态绑定的。

JavaScript代码如下:

<script>
export default {
  data() {
    return {
      objId: ""
    };
  },
  mounted: function() {
    this.initParm(); //参数初始化

    console.log($(".randomBoxDiv"));
    console.log(this.objId);
    console.log($("#"+this.objId));
  },
  methods:{
    initParm: function(){
	this.objId=this.getUid();
    },
    getUid: function() {
      function S4() {
        return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
      }
      return "tagdiv" + S4() + S4() + S4() + S4();
    }
  }
 }
 </script>

浏览器console打印出来的对象,ID已经设置上了,但是用ID获取对象却获取不到。查资料以后发现,这跟vue的渲染顺序有关,在mounted执行时,dom其实并没有渲染完成,所以,在mounted中用动态的ID获取对象是获取不到的。解决方式即是用vue提供的$nextTick,如下:

mounted: function() {
    this.initParm(); //参数初始化

    console.log($(".randomBoxDiv"));
    console.log(this.objId);

    //把动态获取ID的操作放到this.$nextTick的回调中执行即可
    this.$nextTick(() => {
        console.log($("#"+this.objId));
    }
  }

$nextTick 是在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后使用 $nextTick,则可以在回调中获取更新后的 DOM。

以上,留做记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值