考虑这个例子:在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