闻心阁

一蓑烟雨看苍生,半壶浊酒笑红尘

Vuejs中v-if v-show无法获取div高度

2016-05-09 约 1 分钟读完 搬砖秘籍

最近在单页应用开发中尝试使用vue.js,发现无法获取v-if和v-show标记的dom高度。

高度代码

<div id="testVueHeight">
  <button v-on:click="showBigDiv">变</button>
  <div id="bigdiv" v-if="show" style="width:300px; height:300px;background:red;">
  </div>

</div>

<script type="text/javascript">
  var vm = new Vue({
    el   : 'body',
    data : {
      show : false
    },
    methods : {
      showBigDiv : function() {
        this.show = true;
        console.log( document.body.clientHeight );
      }
    }
  });
</script>

运行代码发现只能显示出原来button的高度,也就是说在执行 console.log( document.body.clientHeight ) 的时候并没有加载完成dom,如图:

解决方案

使用vuejs中的 $nextTick 函数可以有效解决这个问题,可以参考官方Api:$nextTick

修正后的js代码如下:

<script type="text/javascript">
  var vm = new Vue({
    el   : 'body',
    data : {
      show : false
    },
    methods : {
      showBigDiv : function() {
        this.show = true;
        console.log( document.body.clientHeight );
        this.$nextTick(function () {
          console.log( 'dom加载完成' );
          console.log( document.body.clientHeight );
        })
      }
    }
  });
</script>

运行结果: