Les Vuejs ne peuvent pas accéder aux réfs à partir du composant

j'essaie d'obtenir l'élément canvas qui est à l'intérieur d'un modèle de Composant, j'ai trouvé de bonnes documentations pour vuejs1 mais pas pour vuejs2 où "ref" est le seul moyen d'obtenir l'élément. J'obtiens l'objet cependant, mais quand j'essaie d'accéder à la variable il n'est pas défini.

mon html

<div id="app>
  <template id="image-capture">
    <div class="row" >
      <canvas ref="icanvas" ></canvas>
    </div>
  </template>
</div>

Mon js

const ic = {
  template: '#image-capture' ,

  created () {
    console.log(this.$refs); //this returns object
    console.log(this.$refs.icanvas); // but this is undefined
  }


}

const routes = [
  { path: '/ic', component:   ic},
]

const router = new VueRouter({
  routes 
})

 new Vue({
  router,
   }).$mount('#app')

j'ai besoin de l'élément icanvas.

here is console log

16
demandé sur Paolo 2016-11-30 12:08:39

3 réponses

created est déclenché avant que le modèle ne soit traité.

Vous pouvez trouver plus de détails ici: https://vuejs.org/v2/guide/instance.html#Lifecycle-Diagram

vous devriez pouvoir accéder aux $ refs sur le mounted événement

mounted: function() {
    console.log(this.$refs.icanvas);
},
23
répondu Mihai Vilcu 2016-11-30 09:21:23

Vous pouvez utiliser la fonction $ nextTick (), le code à l'intérieur de $nextTick () sera exécuté après la mise à jour du DOM.

this.$nextTick(function () {

    console.log(this.$refs.ANY_COMPONENT_REF)

})
4
répondu Kishan Madhesiya 2018-07-12 04:57:27

j'ai eu exactement le même problème, dans mon cas je l'ai résolu en accédant à la réf dans la méthode qui change le v-if avec nextTick.

methods: {
open() {
  this.show = true; //v-if condition
    this.$nextTick(function() {
      this.titleWidth = this.$refs.titleBg.clientWidth - 30;
    });
}
0
répondu Dan Levin 2018-07-12 08:41:06