如何在更改范围滑块 VueJS 后更新值

How to update value after change range slider VueJS

我想在拖动滑块后更新值。

这是我的代码

<div id="app">
    <vue-range-slider v-model="rangeSlider" v-bind="options"></vue-range-slider>
    <p class="mt-50">Value: {{ value }}</p>
</div>

let app = new Vue({
    el: '#app',
    data() {
        return {
            value: 0,
            rangeSlider: 0,
            options: {
                eventType: 'auto',
                width: 'auto',
                height: 5,
                dotSize: 16,
                min: 0,
                max: 50,
                interval: 1,
                show: true,
                speed: 1,
                tooltipDir: 'bottom',
            }
        }
    },
    computed: {
        rangeChange () {
            let range = this.rangeSlider;

            if (range > 0 && range <= 20) {
                return this.value = 4;
            }
            if (range > 20 && range <= 30) {
                return this.value = 5;
            }
            if (range > 30 && range <= 40) {
                return this.value = 6;
            }
            if (range > 40 && range <= 50) {
                return this.value = 7;
            }
        }
    }
})

我在计算中创建了 rangeChange() 来更改 value,但是在我拖动 Slider 之后,value 没有更新。你可以在这里看到更多:https://codepen.io/LinhNT/pen/KKpNeva

我使用这个范围滑块 vue:https://github.com/xwpongithub/vue-range-slider

我该如何解决?

首先 rangeChange 未在任何地方使用,因此永远不会计算该值。

其次,您不应该修改 computed 值中的状态,您可以使用 watcher.

来做到这一点

更新代码:

Vue.config.devtools = false;
Vue.config.productionTip = false;

let app = new Vue({
  el: "#app",
  data() {
    return {
      value: 0,
      rangeSlider: 0,
      options: {
        eventType: "auto",
        width: "auto",
        height: 5,
        dotSize: 16,
        min: 0,
        max: 50,
        interval: 1,
        show: true,
        speed: 1,
        tooltipDir: "bottom",
        tooltipStyle: {
          backgroundColor: "#2AB6CB",
          borderColor: "#2AB6CB"
        },
        processStyle: {
          backgroundColor: "#2AB6CB"
        }
      }
    };
  },
  watch: {
    rangeSlider(range) {
      if (range > 0 && range <= 20) {
        this.value = 4;
      }
      if (range > 20 && range <= 30) {
        this.value = 5;
      }
      if (range > 30 && range <= 40) {
        this.value = 6;
      }
      if (range > 40 && range <= 50) {
        this.value = 7;
      }
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<link href="https://unpkg.com/vue-range-component@1.0.3/dist/vue-range-slider.min.css" rel="stylesheet"/>
<script src="https://unpkg.com/vue-range-component@1.0.3/dist/vue-range-slider.min.js"></script>
<div id="app">
  <vue-range-slider v-model="rangeSlider" v-bind="options"></vue-range-slider>
  <p class="mt-50">Value: {{ value }}</p>
</div>