2015-07-07 14 views
5

Come posso passare il valore selezionato a una funzione vuejs? v-model non aiuta a indovinare.Passa il valore selezionato alla funzione vuejs

ho bisogno di impostare i valori per il filtro dopo item: items | orderBy sortKey reverse dove reverse e sortKey sono valori dinamici.

html

<select class="sort-filter" v-on="change: sortBy(???)"> 
    <option value="title asc">Title (A-Z)</option> 
    <option value="title desc">Title (Z-A)</option> 
    <option value="price asc">Price (Min. - Max.)</option> 
    <option value="price desc">Price (Max. - Min.)</option> 
</select> 

js

methods: { 
    sortBy: function (sortKey) { 
     console.log(sortKey) 
    } 
    } 

risposta

16

Esistono diversi modi per farlo.

Edit: Migliorata 2)

E 'possibile utilizzare v-modello, proprio come in 2) ma invece di utilizzare il valore direttamente nel filtro orderBy, è possibile utilizzare computed proprieties

computed: { 
    sortKey: { 
     get: function() { 
      return this.sorting.split(' ')[0]; // return the key part 
     } 
    }, 
    sortOrder: { 
     get: function() { 
      return this.sorting.split(' ')[1]; // return the order part 
     } 
    } 
} 

in questo modo, SortKey e sortOrder sarà disponibile come una proprietà normale in voi filtrare:

v-repeat="items | orderBy sortKey sortOrder" 

1) utilizzare JavaScript evento:

Se non si specifica alcun parametro, l'oggetto evento nativo verrà passato automaticamente

<select class="sort-filter" v-on:change="sortBy"> 

È quindi possibile utilizzare in questo modo:

methods: { 
    sortBy: function(e) { 
     console.log(e.target.value); 
    }, 
} 

2) Uso di v-modello

È possibile aggiungere la direttiva v-modello

<select name="test" v-model="sorting" v-on:change="sortBy"> 

In questo modo il valore sorting sarà aggiornato ad ogni cambiamento.

È possibile aggiungere questo valore nell'oggetto di dati di voi ViewModel ad essere più chiaro:

data: { 
    sorting: null // Will be updated when the select value change 
} 

È quindi possibile accedere al valore, come nel metodo:

methods: { 
    sortBy: function() { 
     console.log(this.sorting); 
    }, 
} 

Se avete solo bisogno per aggiornare il valore sortKey, questo metodo non è nemmeno necessario.

3) Altro modo strano

È apparentemente possibile utilizzare il valore del modello come parametro.

<select name="test" v-model="sortKey" v-on:change="sortBy(sortKey)"> 

Questo funziona ma non vedo il punto.

methods: { 
    sortBy: function(sortKey) { 
     console.log(sortKey); 
    }, 
} 
+0

Grazie mille, ci proverò domani in ufficio. Il motivo per cui non sto usando v-model è perché il valore contiene anche la direzione di ordinamento, come asc o desc. Se uso 'v-model' vue proverò ad ordinare la base dei risultati per l'attributo' title asc' che non esiste, quindi voglio inviare il valore selezionato a una funzione, dividerlo e usare title come sort attribute e asc o desc come direzione. Spero che abbia senso quello che sto dicendo. Grazie. – rmagnum2002

+0

Ok, penso di aver capito, modifico la mia risposta e aggiungo un'altra possibile soluzione. – Needpoule

+0

Una cosa da aggiungere, 'sortOrder' dovrebbe essere un tipo booleano, vero/falso, quindi ho dovuto verificare se sortOrder è uguale asc: ' return this.sorting.split ('') [1] === 'asc '? false: true' non accetta altri valori oltre al valore booleano per il parametro 3d nel filtro. Grazie. – rmagnum2002

Problemi correlati