2016-04-29 18 views
6

Sto provando ad accedere a un elemento dal dom dal mio componente Vue ma ottengo solo "null". Se vado negli strumenti di sviluppo e provo, posso accedervi. Suppongo che sia un problema di scoping ma non riesco a trovare la risposta.Accesso a un elemento all'interno di un componente Vuejs

<template> 
    <ul class="list-group" id="criteria" v-for="item in criteria"> 
     <li class="list-group-item">{{ item.name }}</li> 
    </ul> 
</template> 

<script> 
    export default { 
     template: "report-criteria", 
     data() { 
      return { 
       criteria: [] 
      } 
     }, 
     ready() { 
      console.log(document.getElementById('criteria')); 
     }, 
     methods: {}, 
    }; 
</script> 

Qualcuno può aiutare per favore?

+1

Il modello 'linea:" criteri di rapporto "' deve essere rimosso – Jeff

risposta

13

VueJS 1.x

Sei probabilmente più facile fuori usando la direttiva v-el, che consente di mappare elementi del componente per una proprietà di VM this.$els.

Inoltre, per quanto ne so, non si dovrebbe combinare la proprietà template con i modelli nel file .vue (si sta assumendo con .vue file, ovviamente).

<template> 
    <ul class="list-group" id="criteria" v-el:criteria v-for="item in criteria"> 
     <li class="list-group-item">{{ item.name }}</li> 
    </ul> 
</template> 

<script> 
    export default { 
     data() { 
      return { 
       criteria: [] 
      } 
     }, 
     ready() { 
      console.log(this.$els.criteria); 
     }, 
     methods: {}, 
    }; 
</script> 
19

Il answer inviato da @nils è per VueJS 1.x. La direttiva v-el è stata rimossa nelle versioni più recenti. È stato sostituito dall'attributo ref.

per raggiungere questo stesso risultato in VueJS 2.x, si dovrebbe fare il seguente invece:

<template> 
    <ul class="list-group" id="criteria" ref="criteria" v-for="item in criteria"> 
    <li class="list-group-item">{{ item.name }}</li> 
    </ul> 
</template> 

<script> 
    export default { 
    data() { 
     return { 
     criteria: [] 
     } 
    }, 
    mounted() { 
     console.log(this.$refs.criteria); 
    }, 
    methods: {}, 
    }; 
</script> 

Si possono trovare maggiori informazioni riguardo ai cambiamenti a VueJS docs.

+1

Si noti che l'esempio non è corretto per Vue 2, il metodo è chiamato 'montato' invece di' pronto': https://vuejs.org/v2 /guide/instance.html#Lifecycle-Diagram – Diego

+0

Ehi, @Diego! Grazie per il testa a testa. Ho focalizzato la mia risposta sulle direttive e non ho prestato attenzione a ciò. Ho appena aggiornato il codice di esempio. –

Problemi correlati