Vue.js получает выбранную опцию на @change
Во-первых, я хочу сказать, что im new для Vue, и это мой первый проект, когда-либо использовавший Vue. У меня есть combobox, и я хочу сделать что-то другое в зависимости от выбранного combobox. Я использую отдельный файл vue.html и машинописный файл. Вот мой код.
<select name="LeaveType" @change="onChange()" class="form-control">
<option value="1">Annual Leave/ Off-Day</option>
<option value="2">On Demand Leave</option>
</select>
и вот мой ts файл
onChange(value) {
console.log(value);
}
Как получить выбранное значение параметра в моей функции машинописного текста? Благодарю.
Ответы
Ответ 1
Используйте v-model
чтобы связать значение выбранного значения параметра. Вот пример.
<select name="LeaveType" @change="onChange($event)" class="form-control" v-model="key">
<option value="1">Annual Leave/ Off-Day</option>
<option value="2">On Demand Leave</option>
</select>
<script>
var vm = new Vue({
data: {
key: ""
},
methods: {
onChange(event) {
console.log(event.target.value)
}
}
}
</script>
Больше ссылок можно увидеть здесь.
Ответ 2
@ - это опция быстрого доступа для v-on. Используйте @ только тогда, когда вы хотите выполнить некоторые методы Vue. Поскольку вы не выполняете методы Vue, вместо этого вы вызываете функцию javascript, вам нужно использовать атрибут onchange для вызова функции javascript
<select name="LeaveType" onchange="onChange(this.value)" class="form-control">
<option value="1">Annual Leave/ Off-Day</option>
<option value="2">On Demand Leave</option>
</select>
function onChange(value) {
console.log(value);
}
Если вы хотите вызывать методы Vue, делайте это как this-
<select name="LeaveType" @change="onChange($event)" class="form-control">
<option value="1">Annual Leave/ Off-Day</option>
<option value="2">On Demand Leave</option>
</select>
new Vue({
...
...
methods:{
onChange:function(event){
console.log(event.target.value);
}
}
})
Вы можете использовать атрибут данных v-model для элемента select, чтобы связать значение.
<select v-model="selectedValue" name="LeaveType" onchange="onChange(this.value)" class="form-control">
<option value="1">Annual Leave/ Off-Day</option>
<option value="2">On Demand Leave</option>
</select>
new Vue({
data:{
selectedValue : 1, // First option will be selected by default
},
...
...
methods:{
onChange:function(event){
console.log(this.selectedValue);
}
}
})
Надеюсь это поможет :-)
Ответ 3
Измененное значение будет в event.target.value
const app = new Vue({
el: "#app",
data: function() {
return {
message: "Vue"
}
},
methods: {
onChange(event) {
console.log(event.target.value);
}
}
})
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
<div id="app">
<select name="LeaveType" @change="onChange" class="form-control">
<option value="1">Annual Leave/ Off-Day</option>
<option value="2">On Demand Leave</option>
</select>
</div>
Ответ 4
Вы также можете использовать V-модель для спасения
<template>
<select name="LeaveType" v-model="leaveType" @change="onChange()" class="form-control">
<option value="1">Annual Leave/ Off-Day</option>
<option value="2">On Demand Leave</option>
</select>
</template>
<script>
export default {
data() {
return {
leaveType: '',
}
},
methods: {
onChange() {
console.log('The new value is: ', this.leaveType)
}
}
}
</script>
Ответ 5
Вы можете сохранить свои @change = "onChange()" в качестве наблюдателей. Vue вычисляет и наблюдает, он разработан для этого. В случае, если вам нужно только значение, а не другие сложные атрибуты события.
Что-то вроде:
...
watch: {
leaveType () {
this.whateverMethod(this.leaveType)
}
},
methods: {
onChange() {
console.log('The new value is: ', this.leaveType)
}
}