【发布时间】:2016-10-26 14:04:15
【问题描述】:
在以下代码 (jsbin available here) 中,我有两个输入元素,一个范围和一个文本,通过计算属性绑定在一起。
var vm = new Vue({
el: '#main-container',
data: {
sliderValue: 100,
},
computed: {
actualValue: {
get: function() {
if (this.sliderValue <= 100) {
return this.sliderValue;
} else {
return Math.round(this.sliderValue * 12.5 - 1150);
}
},
/* set won't work for val > 100*/
set: function(val) {
if (val <= 100) {
this.sliderValue = val;
} else {
this.sliderValue = Math.round((val + 1150)/12.5);
}
}
}
},
methods: {
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.0.3/vue.js"></script>
<div id="main-container">
<input type="range" v-model="sliderValue" min=1 max=132>
<input type="text" v-model="actualValue">
<p>Slider: {{sliderValue}}</p>
<p>Actual: {{actualValue}}</p>
</div>
范围从 1 到 132,它的 范围 在文本输入中映射为 [1..500],通过简单的转换(基本上它是一个线性映射,具有两个不同的斜率 [ 1..100] 和 [101..132]) 使用 actualValue 计算属性。
获取实际值按预期工作:拖动滑块正确地使用范围 [1..500] 内的适当值更新输入文本。
不过,我无法找到设置实际值的方法。我希望能够在文本输入中键入一个值,并使滑块的拇指根据逆变换 (val + 1150)/12.5 进行相应更新。
只要输入的数字在 [1..100] 范围内,它就可以工作,但对于 >100 的数字,它会“爆炸”,例如101 使sliderValue 跳到80892,然后actualValue 重新计算为1010000。据我了解,这是一个循环反馈场景。
我也尝试了其他方法(观看;v-on:更改文本输入;使用第三个变量)无济于事。
提前感谢您的任何建议!
【问题讨论】:
标签: vue.js