Как обновить значение после изменения ползунка диапазона VueJS - PullRequest
0 голосов
/ 22 февраля 2020

Я хочу обновить значение после перетаскивания ползунка.

Это мой код

<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, но после Перетаскивая ползунок, value не обновляется. Вы можете увидеть больше здесь: https://codepen.io/LinhNT/pen/KKpNeva

Я использую этот бегунок диапазона vue: https://github.com/xwpongithub/vue-range-slider

Как я могу это исправить

1 Ответ

1 голос
/ 22 февраля 2020

Первый 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>
...