Vue.js mendapatkan opsi yang dipilih di @change

108

Pertama, saya ingin mengatakan bahwa saya baru mengenal Vue, dan ini adalah proyek pertama saya yang menggunakan Vue. Saya memiliki kotak kombo dan saya ingin melakukan sesuatu yang berbeda berdasarkan kotak kombo yang dipilih. Saya menggunakan file vue.html dan skrip terpisah. Ini kode saya.

<select name="LeaveType" @change="onChange()" class="form-control">
     <option value="1">Annual Leave/ Off-Day</option>
     <option value="2">On Demand Leave</option>
</select>

dan inilah file ts saya

onChange(value) {
    console.log(value);
}

Bagaimana cara mendapatkan nilai opsi yang dipilih dalam fungsi skrip ketikan saya? Terima kasih.

hphp
sumber

Jawaban:

200

Gunakan v-modeluntuk mengikat nilai dari nilai opsi yang dipilih. Berikut ini contohnya .

<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>

Referensi lebih lanjut dapat dilihat dari sini .

ramwin
sumber
1
itu mendapatkan kesalahan "kunci tidak ditentukan". apakah saya harus mendefinisikan v-model terlebih dahulu? jika ya, bagaimana caranya?
hphp
Ya, Anda dapat mengatur nama apa pun untuk mengganti kunci. Tetapi pastikan ini adalah properti data.
ramwin
Saya masih, tidak mengerti .. saya tahu saya dapat mengganti namanya menjadi nama apapun, tetapi saya mendapatkan peringatan "[Vue warn]: Properti atau metode" dipilih "tidak ditentukan pada instance tetapi direferensikan selama render. Pastikan ini properti reaktif, baik dalam opsi data, atau untuk komponen berbasis kelas, dengan menginisialisasi properti "
hphp
Mungkin ada kesalahan ketik pada skrip Anda karena tidak ada kata 'terpilih' di skrip. Silakan periksa dan lihat tautan di jawaban. Saya menambahkan contoh demo di dalamnya.
ramwin
"terpilih" adalah nama model saya. jika saya menulis ulang kode Anda, peringatan saya akan menjadi "kunci" tidak ditentukan
hphp
38

@ adalah opsi pintasan untuk v-on . Gunakan @ hanya jika Anda ingin menjalankan beberapa metode Vue. Karena Anda tidak menjalankan metode Vue, sebagai gantinya Anda memanggil fungsi javascript, Anda perlu menggunakan atribut onchange untuk memanggil fungsi 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);
}

Jika Anda ingin memanggil metode Vue, lakukan seperti ini-

<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);
    }
  }
})

Anda dapat menggunakan atribut data v-model pada elemen pilih untuk mengikat nilai.

<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);
        }
    }
})

Semoga ini membantu :-)

santanu bera
sumber
Saya mendapatkan kesalahan berikut ketika saya menjalankan yang kedua di vuejs: Uncaught TypeError: Tidak dapat membaca properti 'apply' dari undefined
TheDevWay
Saya belum pernah menggunakan "melamar" di mana pun dalam Kode. Bisakah Anda membagikan kode di mana Anda mendapatkan kesalahan?
santanu bera
23

Nilai yang diubah akan masuk 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>

Agney
sumber
8

Anda juga dapat menggunakan v-model untuk penyelamatan

<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>
Merhawi Fissehaye
sumber
Bagaimana cara menambahkan teks masukan tergantung pada opsi yang dipilih?
Angel
0

Anda dapat menyimpan @ change = "onChange ()" Anda sebagai pengamat penggunaan. Vue menghitung dan jam tangan, dirancang untuk itu. Jika Anda hanya membutuhkan nilai dan bukan atribut Acara kompleks lainnya.

Sesuatu seperti:

  ...
  watch: {
    leaveType () {
      this.whateverMethod(this.leaveType)
    }
  },
  methods: {
     onChange() {
         console.log('The new value is: ', this.leaveType)
     }
  }
biojazzard
sumber
Harap dicatat bahwa pengamat mahal. hal di atas juga dapat dicapai sebagai properti yang dihitung, yang jauh lebih murah.
Ramesh Pareek