考慮這個例子:在Vue.js
<input type="text" v-model="value">
<span>Value is: {{ value }}</span>
我要的是把一個雙向轉換功能,將目前的值在輸入字段的一種形式,但保持在另一種形式的數據。最簡單的例子是否定數值:如果用戶輸入5
,我希望數據實際接收−5
。在Vue.js 1.0中完成這個最好的方法是什麼?
考慮這個例子:在Vue.js
<input type="text" v-model="value">
<span>Value is: {{ value }}</span>
我要的是把一個雙向轉換功能,將目前的值在輸入字段的一種形式,但保持在另一種形式的數據。最簡單的例子是否定數值:如果用戶輸入5
,我希望數據實際接收−5
。在Vue.js 1.0中完成這個最好的方法是什麼?
您可以使用觀察家這一點。
每當輸入值改變時,觀察者將以任何你想要的方式更新數據屬性值。輸入顯示值將保持不變,但您的數據屬性將具有新的操縱值。
對於前:
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>
你可以只寫一個計算的屬性:
new Vue({
el: "#app",
data: {
value: 0
},
computed: {
negValue() {return -this.value}
}
})
然後模板變成
<input type="text" v-model="value">
<span>Value is: {{ negValue }}</span>
這隻會否定價值的呈現; 'data.value'不是否定的。我需要否定數據,而不是數據的呈現,因爲數據會發布到服務器端,而這正是需要減號的地方。 – Greendrake
只需發佈'negValue'而不是'value'我沒有看到問題。 – gurghet
您可以使用一個觀察者設置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.
所以你的意思是格式化的輸入,使得它看起來'5'但' - 5'? –
@AmreshVenugopal是的,非常。 – Greendrake