vue之$nextTick

Vue提供的nextTick方法是在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后使用 $nextTick,则可以在回调中获取更新后的 DOM。
现在有这么个需求,要求点击表格的扩展三角就展开扩展行。
在这里插入图片描述
现在遇到的问题呢,假如扩展行的数据是同步的,那么展开就是正常展示的;如果数据是点击时才异步加载的,那么表格展开就是空白,因为在数据回来并绑定之前,扩展行就已经展开了,导致数据没有渲染上去。这时就要用到nextTick来延迟回调并刷新。

// 点击扩展行时请求集团数据
    expandChange(row){
      let self = this;
      let phenomenonCode = row.phenomenonCode2;
      // 如果集团列表已经有数据,则直接返回
      if( row.blocPhenoClassMapping ){
        return;
      }
      querySmallClassBlocInfo( phenomenonCode )
      .then( response => {
          if(response.data.code == 200){
              self.$set(row,'blocPhenoClassMapping',response.data.data.list)
              row.blocPhenoClassMapping.map(item =>{
              switch(item.isEndNode){
                case 'Y':
                item.isEndNode = '是';
                break;
                case 'N':
                item.isEndNode = '否';
                break;
              }
              });
              // 在数据绑定好时再展开扩展行
              self.$nextTick(function () {
                self.$refs.blocTreeTable.toggleRowExpansion( row, true );
              });
          }else{
              self.$message({
                  message: response.data.msg,
                  type: 'warning'
              });
          }
      })
      .catch((err) =>{
      })  
    },

还比如:用swiper插件写轮播图时,图片也是异步加载的,这时也得用nextTick来处理,不然轮播图也是一片空白啦。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值