2

我正在尝试从 vue-select 获取选定的值,但已经使用了所有方法并搜索了帮助,但这是否可以工作,我也有在页面加载时触发警报

Vue.component('v-select', VueSelect.VueSelect)
new Vue({
  el: '#app',
  data: {
    options: [      
      {id: 1, label: 'foo'},
      {id: 3, label: 'bar'},
      {id: 2, label: 'baz'},
    ],
    selected: '',
  },
  methods: {
    runme: function() {
      alert(this.selected);
    }
  }
})
body {
  font-family: 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;
}

h1 {
  font-size: 26px;
  font-weight: 600;
  color: #2c3e5099;
  text-rendering: optimizelegibility;
  -moz-osx-font-smoothing: grayscale;
  -moz-text-size-adjust: none;
}

#app {
  max-width: 30em;
  margin: 1em auto;
}
<script src="https://vuejs.org/js/vue.js"></script>
<script src="https://unpkg.com/vue-select@2.4.0/dist/vue-select.js"></script>
<div id="app">
  <h1>Vue Select - Using v-model</h1>
  <v-select v-model="selected" :on-change="runme" :options="options"></v-select>  
</div>

4

3 回答 3

6

vue-select作者在这里。回调将on-change在 中弃用v2.5.0并删除v2.6.0v2.4.0这是来自源的道具:

/**
 * An optional callback function that is called  
 * each time the selected value(s) change.
 *
 * @type {Function}
 * @param {Object || String} val
 */
onChange: {
  type: Function,
  default: function (val) {
    this.$emit('input', val)
  }
}

正如 Bob Dust 所解释的,这里的关键是onChange调用,这是 Vue 提供语法this.$emit('input',val)的挂钩。v-model如果未发出事件,Vue 将不知道更改。

如果您需要v-model并且还想在值发生变化时采取行动,那么监听@input事件是最好的选择:

<v-select v-model="selected" @input="runme" :options="options"></v-select>
于 2018-02-15T16:46:27.073 回答
3

是您的change事件处理程序抑制了input事件的发射(实际上以 2 的方式绑定v-model)。你只需要听input

<v-select v-model="selected" @input="runme" :options="options"></v-select>
于 2018-02-13T07:09:54.600 回答
0

这里有几件事,第一个问题是runme方法。通过使用function,您正在改变this. 要访问数据属性,您应该使用 es6 箭头语法:

  methods: {
    runme: () => {
      alert(this.selected);
    }
  }

其次,您实际上甚至不需要selected,只需将值作为参数传递给runme.

这是一个工作小提琴

更新了您的代码段

Vue.component('v-select', VueSelect.VueSelect)
new Vue({
  el: '#app',
  data() {
    return {
      options: [{
        value: 1,
        label: 'foo'
      }, {
        value: 3,
        label: 'bar'
      }, {
        value: 2,
        label: 'baz'
      }, ],
    }
  },
  methods: {
    runme: selected => {
      alert(`label: ${selected.label} value: ${selected.value}`);
    }
  }
})
<script src="https://vuejs.org/js/vue.js"></script>
<script src="https://unpkg.com/vue-select@2.4.0/dist/vue-select.js"></script>
<div id="app">
  <h1>Vue Select - Using v-model</h1>
  <v-select :on-change="runme" :options="options"></v-select>
</div>

于 2018-02-13T07:39:56.943 回答