javascript - Vue.js 2.x.x + noUiSlider : lifecycle and slider creation

标签 javascript vue.js nouislider

我想要一个带有两个输入的双范围 slider 来控制范围。

就像这个:/image/8w0UI.png

我还需要将它与 vue.js 一起使用。

我已经用 vue 1.0.19 完成了这个目标。

现在我想用 vue 2.5.13 来做,但它根本不起作用。

我认为这是因为我的 javaScript 中有现成的方法。

我已经尝试使用 created 和 mounted 但没有成功。

我的javascript:

    var vue = new Vue({
    el: '#main',
    data: {
        minRange: null,
        maxRange: null,
        slider: {
            startMin: 25,
            startMax: 75,
            min: 0,
            max: 100,
            start: 40,
            step: 1
        },
        Slider: document.getElementById('slider')
    },
    methods: {
        updateSlider: function updateSlider() {
            this.Slider.noUiSlider.set([this.minRange, this.maxRange]);
        }
    },
    ready: function ready() {
        noUiSlider.create(this.Slider, {
            start: [this.slider.startMin, this.slider.startMax],
            step: this.slider.step,
            range: {
                'min': this.slider.min,
                'max': this.slider.max
            }
        });
    }
});

vue.$data.Slider.noUiSlider.on('update', function(values, handle) {
    vue.$data[handle ? 'maxRange' : 'minRange'] = values[handle];
});

我的 html:

<div id="main">
        <br>
        <div id="slider"></div>
        <br>
        <input id="slider-input" v-model="minRange" v-on:change="updateSlider" />
        <input id="slider-input" v-model="maxRange" v-on:change="updateSlider" />
    </div>

最佳答案

不要使用 vue.$data.{data} 立即访问数据。使用 vue.{data},并使用 refs要在 vue 中访问 dom,这里是一个工作示例

var vue = new Vue({
  el: '#main',
  data: {
    minRange: null,
    maxRange: null,
    slider: {
      startMin: 25,
      startMax: 75,
      min: 0,
      max: 100,
      start: 40,
      step: 1
    }        
  },
  methods: {
    updateSlider: function updateSlider() {
      this.$refs.slider.noUiSlider.set([this.minRange, this.maxRange]);
    }
  },
  mounted: function() {
    noUiSlider.create(this.$refs.slider, {
      start: [this.slider.startMin, this.slider.startMax],
      step: this.slider.step,
      range: {
        'min': this.slider.min,
        'max': this.slider.max
      }
    }); 
            
    this.$refs.slider.noUiSlider.on('update',(values, handle) => {
      this[handle ? 'maxRange' : 'minRange'] = parseInt(values[handle]);
    }); 
  }
});
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/noUiSlider/11.0.3/nouislider.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/noUiSlider/11.0.3/nouislider.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.13/dist/vue.min.js"></script>

<div id="main">
  <br>
  <div id="slider" ref="slider"></div>
  <br>
  <input v-model="minRange" v-on:change="updateSlider" />
        
  <input v-model="maxRange" v-on:change="updateSlider" />
  </div>

关于javascript - Vue.js 2.x.x + noUiSlider : lifecycle and slider creation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48545335/

相关文章:

javascript - vue.js TreeView 初学者

javascript - 在 R Shiny 中的垂直 noUiSliderInput 上将标签自定义为指数文本格式

javascript - 在 Ace 编辑器中执行搜索时,荧光笔不会跳转到正确的找到的结果

javascript - 使用jquery从iframe中的url加载第n个类

javascript - ng-show 不适用于 bool 值

Vue.js - 条件之间的转换(v-if 和 v-else)

javascript - 在 Google Action 意图中发送 GET 请求

javascript - Vue v-for 性能差

javascript - 如何使用 slider 更新值更新标签值

nouislider - 从带有两个句柄的 NoUiSlider 中获取值