我正在尝试使用触发该foo()
功能,@click
但是如您所见,需要按两次单选按钮才能正确触发该事件。仅在第二次按下时捕获该值。
我想触发事件而不@click
只是在v-model
(srStatus)更改时触发事件。
这是我的小提琴:
Answers:
发生这种情况是因为您的click
处理程序在单选按钮的值更改之前触发。您需要改为监听change
事件:
<input
type="radio"
name="optionsRadios"
id="optionsRadios2"
value=""
v-model="srStatus"
v-on:change="foo"> //here
另外,请确保您确实想打电话foo()
准备好……似乎您实际上并不想这样做。
ready:function(){
foo();
},
您实际上可以通过删除v-on
指令来简化此操作:
<input type="radio" name="optionsRadios" id="optionsRadios1" value="1" v-model="srStatus">
并使用该watch
方法来监听更改:
new Vue ({
el: "#app",
data: {
cases: [
{ name: 'case A', status: '1' },
{ name: 'case B', status: '0' },
{ name: 'case C', status: '1' }
],
activeCases: [],
srStatus: ''
},
watch: {
srStatus: function(val, oldVal) {
for (var i = 0; i < this.cases.length; i++) {
if (this.cases[i].status == val) {
this.activeCases.push(this.cases[i]);
alert("Fired! " + val);
}
}
}
}
});
您应该使用@input
:
<input @input="handleInput" />
@input
用户更改输入值时触发。
@change
当用户更改值和未聚焦输入(例如在外部某处单击)时触发
您可以在这里看到区别:https : //jsfiddle.net/posva/oqe9e8pb/
只需添加到上面的正确答案,在Vue.JS v1.0中,您可以编写
<a v-on:click="doSomething">
所以在这个例子中
v-on:change="foo"