2017-04-10 1 views
0

dieses Beispiel vor:in Vue.js

<input type="text" v-model="value"> 
<span>Value is: {{ value }}</span> 

Was ich will, ist eine bidirektionale Transformationsfunktion setzen, die den Wert in dem Eingabefeld in einer Form darstellen würden, aber es hält in den Daten in einer anderen Form. Das einfachste Beispiel wäre die Negation von numerischen Werten: Wenn der Benutzer 5 eingibt, möchte ich, dass die Daten tatsächlich −5 erhalten. Was wäre der beste Weg, dies in Vue.js 1.0 zu erreichen?

+0

so meine Formatierung Sie die Eingabe, so dass, scheint es, '5' aber ist '- 5'? –

+0

@ AmreshVenugopal Ja, ziemlich viel. – Greendrake

Antwort

1

Sie Beobachter dafür nutzen könnten.

Jedes Mal, wenn sich der Eingabewert ändert, aktualisiert der Watcher den Dateneigenschaftswert auf beliebige Weise. Der eingegebene Anzeigewert bleibt gleich, aber Ihre Dateneigenschaft hat den neuen manipulierten Wert.

Für ex .:

new Vue({ 
    el: "#app", 
    data: { 
    value: 0, 
    display_value: 0 
    }, 
    watch: { 
     display_value: function (newValue) { 
      this.value = -parseInt(newValue); 
     } 
    } 
}) 

Und Ihre html:

<input type="text" v-model="display_value"> 
<span>Value is: {{ value }}</span> 

Fiddle: https://jsfiddle.net/crabbly/30e6h4uj/

5

Sie können eine berechnete Eigenschaft für das nur schreiben:

new Vue({ 
    el: "#app", 
    data: { 
    value: 0 
    }, 
    computed: { 
    negValue() {return -this.value} 
    } 
}) 

Und dann wird die Vorlage

<input type="text" v-model="value"> 
<span>Value is: {{ negValue }}</span> 

https://jsfiddle.net/adf2kLhe/

+0

Das negiert nur die Darstellung des Wertes; 'data.value' wird nicht negiert. Ich muss die Daten negieren, nicht die Darstellung, weil die Daten dann auf die Serverseite geschrieben werden und dort ist das Minuszeichen erforderlich. – Greendrake

+1

Geben Sie einfach 'negValue' anstelle von' value' ein. Ich sehe das Problem nicht. – gurghet

1

Sie einen Watcher negValue

new Vue({ 
    el: "#app", 
    data: { 
    value: 0, 
    negValue: 0 
    }, 
    watcher: { 
    value(value) {this.negValue = -value} 
    } 
}) 
einstellen können

Dann:

<input type="text" v-model="value"> 
<span>Value is: {{ negValue }}</span> 

Wenn Sie es an den Server senden, senden Sie einfach negValue statt value.