Vue.js, @change üzerinde seçilen seçeneği alır


102

Öncelikle, Vue'da yeni olduğumu söylemek istiyorum ve bu benim Vue kullanan ilk projem. Birleşik giriş kutum var ve seçilen birleşik giriş kutusuna bağlı olarak farklı bir şey yapmak istiyorum. Ayrı vue.html ve typescript dosyası kullanıyorum. İşte kodum.

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

ve işte benim ts dosyam

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

Typcript fonksiyonumda seçilen seçenek değeri nasıl elde edilir? Teşekkürler.

Yanıtlar:


189

v-modelSeçilen seçeneğin değerinin değerini bağlamak için kullanın . İşte bir örnek .

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

Buradan daha fazla referans görülebilir .


1
"anahtar tanımlı değil" hatası alıyor. önce v-modelini tanımlamam gerekiyor mu? evet ise nasıl?
hphp

Evet, anahtarı değiştirmek için herhangi bir isim ayarlayabilirsiniz. Ancak bunun bir veri özelliği olduğundan emin olun.
ramwin

Yine de, anlamıyorum .. onu herhangi bir adla yeniden adlandırabileceğimi biliyorum, ancak bir uyarı alıyorum "[Vue warn]: Özellik veya yöntem" seçildi "örnekte tanımlı değil, oluşturma sırasında başvuruluyor. Bunun olduğundan emin olun özellik, "
hphp

Belki senaryonuzda bir yazım hatası vardır, çünkü senaryoda 'seçili' kelimesi yoktur. Lütfen kontrol edin ve cevaptaki bağlantıya bakın. İçine bir demo örneği ekliyorum.
ramwin

Model adım "seçildi". kodunuzu yeniden
yazarsam uyarım

37

@ , v-on için bir kısayol seçeneğidir . Kullanım @ bazı Vue yöntemlerini yürütmek istiyorum sadece. Vue yöntemlerini çalıştırmadığınız için, bunun yerine javascript işlevini çağırıyorsunuz, javascript işlevini çağırmak için onchange özniteliğini kullanmanız gerekir.

<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 yöntemlerini aramak istiyorsanız, bunu şu şekilde yapın-

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

Değeri bağlamak için select öğesinde v-model data niteliğini kullanabilirsiniz .

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

Bu yardımcı olur umarım :-)


Vuejs'de ikinciyi çalıştırdığımda şu hatayı alıyorum: Yakalanmamış TypeError: Tanımsız 'uygulama' özelliği okunamıyor
TheDevWay

Kuralların hiçbir yerinde "uygula" kullanmadım. Lütfen hatayı aldığınız kodu paylaşır mısınız?
santanu bera

23

Değiştirilen değer içinde olacak 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>


6

Kurtarma için v-modelini de kullanabilirsiniz.

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

Girdi metnini nasıl eklerim seçili seçeneğe bağlıdır?
Angel

0

@ Change = "onChange ()" ve kullanım izleyicilerinizi kaydedebilirsiniz . Vue hesaplar ve izler, bunun için tasarlanmıştır. Diğer karmaşık Etkinlik özelliklerine değil, yalnızca değere ihtiyacınız olması durumunda.

Gibi bir şey:

  ...
  watch: {
    leaveType () {
      this.whateverMethod(this.leaveType)
    }
  },
  methods: {
     onChange() {
         console.log('The new value is: ', this.leaveType)
     }
  }

İzleyicilerin pahalı olduğunu lütfen unutmayın. yukarıdakiler, çok daha ucuz olan hesaplanmış bir özellik olarak da elde edilebilir.
Ramesh Pareek
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.