【发布时间】:2017-10-05 19:39:13
【问题描述】:
我有一个 <select> 元素,它有一个使用 Vue 中的 v-model 绑定到它的数据属性。
有时我想动态更改该值。我还有一个附加到此元素的事件侦听器,它在change-事件上触发。见代码示例:
<template>
<div class="mySelector">
<select id="testSelect" v-model="mySelectModel"
@change="onChange($event)">
<template v-for="(item, index) in someList">
<option :class="['btn', 'btn-default', 'removing-button']" :value="index">{{item.name}}</option>
</template>
</select>
</div>
</template>
<script>
export default {
data() {
return {
mySelectModel: null
}
},
props: {
},
methods: {
customChange: function() {
this.mySelectModel = ... // some value we from somewhere else that is set dynamically on some condiftion
},
onChange: function (event) {
if (!event) return;
// DO SOMETHING THAT WE ONLY WANT TO DO ON A REAL CLICK
}
},
}
</script>
我遇到的问题是,当我动态更改数据值mySelectModel 时,就像在customChange-方法中一样,change 事件也被调用,触发方法onChange。如果它真的是由真正的点击触发的,我只想在那个方法中做一些事情,而不是当它被动态更改时。
当change-event 由单击触发或由于其他原因而更改时,我无法找到区分这些情况的方法。有什么建议吗?
【问题讨论】:
-
如果用作
v-model的属性发生变化,则不应调用change事件。看到这个小提琴jsfiddle.net/gpedcsr4/1。你能举个例子吗?