请检查以下代码。
<tr>
<td>Select Timeslot</td>
<td colspan="2">
<select class="form-control" v-on:change="onTimeSlotClick">
<option v-for="slot of slots">
<label slot.time_from - slot.time_to</label>
</option>
</select>
</td>
</tr>
我想将slot
对象传递给onTimeSlotClick
方法。我怎样才能做到这一点?
我尝试了onTimeSlotClick(slot)
之类的内容,但在undefined
方法中获得了onTimeSlotClick
。
答案 0 :(得分:5)
将v-model
用于选择标记并将值设置为对象
var vm = new Vue({
el: '#vue-instance',
data: {
rows: [
{name: 'MacBook Air', price: 1000},
{name: 'MacBook Pro', price: 1800},
{name: 'Lenovo W530', price: 1400},
{name: 'Acer Aspire One', price: 300}
],
item:""
},
methods:{
onTimeSlotClick: function(item){
console.log(item);
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.16/vue.js"></script>
<div id="vue-instance">
<select class="form-control" v-model="item" v-on:change="onTimeSlotClick(item)">
<option value="">Select</option>
<option v-bind:value="row" v-for="row in rows">
<label>{{row.name}}</label>
</option>
</select>
<div>{{item | json}}</div>
</div>
答案 1 :(得分:0)
在select上尝试v-model属性。所以...
<tr>
<td>Select Timeslot</td>
<td colspan="2">
<select class="form-control" v-model="selected" v-on:change="onTimeSlotClick(selected)">
<option v-for="slot of slots">
<label slot.time_from - slot.time_to</label>
</option>
</select>
</td>
</tr>
您可以明确地传递selected
,就像在示例中一样,或者只使用onclick作为触发器,并从您在Vue中定义它的任何位置读取selected
。
在不知道问题的情况下,尽量避免使用事件处理程序。您通常可以使用反应管道定义您想要的内容,并且您的代码将更短且更具表现力。