2016-01-11 19 views
16

Ho un elemento che voglio guardare per un cambiamento come questo:Evento Vuejs sulla modifica del valore dell'elemento?

<span id="slider-value-upper" class="lower">50</span> 

E 'possibile fare questo in modo pulito con vuejs? Ho provato a cercare nei documenti ma non ho trovato nulla di simile.

Voglio lanciare un evento personalizzato ogni volta che '50' cambia in qualcos'altro con VueJs.

+0

Quale proprietà vuoi cambiare? –

+0

Voglio solo prendere il valore dell'elemento span dopo che è cambiato. Questo valore è collegato a un dispositivo di scorrimento e voglio passare il valore dell'elemento a vuejs quando viene modificato da un cursore. –

risposta

27

Hai provato con watch? Nel tuo caso sarebbe qualcosa di simile.

modello

<div id="app"> 
    {{ message }} 
    <span id="slider-value-upper" class="lower">{{myValue}}</span><br /> 
    <input v-model="myValue"> 
</div> 

codice js

new Vue({ 
    el: '#app', 
    data: { 
     message: 'Watch example', 
     myValue: 50 
    }, 
    watch: { 
     'myValue': function(val, oldVal){ 
     if (val < 50) { 
      this.message= 'value too low!'; 
     }else{ 
      this.message= 'value is ok'; 
     } 
     } 
    } 
}) 

check out the example

+0

Funziona ma solo quando il valore dell'elemento di span attuale viene modificato digitando qualcos'altro nel campo di input. Il mio cursore manipola il valore nella casella di input senza digitare e non si innesca. –

+2

cambia solo quando si digita perché ho aggiunto 'v-model' all'input, dovresti associare' v-model' al tipo di input che sta cambiando il tuo valore. Se stai modificando il tuo valore senza input, ad esempio direttamente con javascript, devi mantenere sincronizzata la proprietà 'data' del tuo componente Vue, e la reattività farebbe la magia. Ad ogni modo, se vuoi maggiori dettagli devi aggiungere la porzione di codice che effettivamente apporta la modifica –

+0

Cosa succede se myValue non si trova nella root ma all'interno di un oggetto come ... first: {myValue: ''} .. poiché non lo è possibile mettere nell'orologio qualcosa come 'first, myValue' ... qual è il modo giusto per farlo? ' – SoldierCorp

Problemi correlati