2017-04-10 106 views
0
變換V模型綁定值

考慮這個例子:在Vue.js

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

我要的是把一個雙向轉換功能,將目前的值在輸入字段的一種形式,但保持在另一種形式的數據。最簡單的例子是否定數值:如果用戶輸入5,我希望數據實際接收−5。在Vue.js 1.0中完成這個最好的方法是什麼?

+0

所以你的意思是格式化的輸入,使得它看起來'5'但' - 5'? –

+0

@AmreshVenugopal是的,非常。 – Greendrake

回答

1

您可以使用觀察家這一點。

每當輸入值改變時,觀察者將以任何你想要的方式更新數據屬性值。輸入顯示值將保持不變,但您的數據屬性將具有新的操縱值。

對於前:

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

,並將HTML:

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

小提琴:https://jsfiddle.net/crabbly/30e6h4uj/

5

你可以只寫一個計算的屬性:

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

然後模板變成

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

https://jsfiddle.net/adf2kLhe/

+0

這隻會否定價值的呈現; 'data.value'不是否定的。我需要否定數據,而不是數據的呈現,因爲數據會發布到服務器端,而這正是需要減號的地方。 – Greendrake

+1

只需發佈'negValue'而不是'value'我沒有看到問題。 – gurghet

1

您可以使用一個觀察者設置negValue

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

然後:

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

當你把它發送到服務器,只需發送的negValue代替value.