设置$ refs.theReference时运行代码

时间:2016-12-04 12:21:11

标签: vue.js

我动态显示/隐藏画布,当它即将显示时,我想要画画。我使用data变量(true / false)来插入/删除画布,并在此值更改时使用watch来绘制它。我在画布上添加了ref=canvas以获取对canvas DOM元素的引用,但是当调用watch回调时,this.$refs.canvas尚未分配任何内容价值。

以下是一个例子:

http://jsfiddle.net/3v9Lbjbr/3/

除了使用setTimeout推迟绘图操作之外,还有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您可以使用Vuejs提供的$nextTick方法 您可以在文档中详细了解它:https://vuejs.org/v2/guide/reactivity.html#Async-Update-Queue

以下是您的用例示例:



var demo = new Vue({
    el: '#demo',
    data: {
        showCanvas: false,
    },
    methods: {
    	show: function(){
      	this.showCanvas = true
      }
    },
    watch: {
      'showCanvas': function() {
        this.$nextTick(function() {
          alert(this.$refs.canvas);
        }.bind(this))
      }
    }
})

canvas{
  background-color: red;
}

<div id="demo" v-cloak>
   <p v-on:click="show">
   Show canvas.
   </p>
   <canvas v-if="showCanvas" ref="canvas"></canvas>
</div>

<script src="https://unpkg.com/vue/dist/vue.js"></script>
&#13;
&#13;
&#13;