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.

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 .


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


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/vue@2.5.16/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>


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>

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

Harap dicatat bahwa pengamat mahal. hal di atas juga dapat dicapai sebagai properti yang dihitung, yang jauh lebih murah.
Ramesh Pareek
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.