Vue.js отримує вибрану опцію на @change


102

По-перше, я хочу сказати, що я нова для Vue, і це мій перший проект, коли-небудь використовуючи Vue. У мене є комбобокс, і я хочу зробити щось інше на основі вибраного комбобокса. Я використовую окремий файл 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);
}

Як отримати вибране значення параметра у моїй функції машинопису? Дякую.

Відповіді:


188

Використовуйте 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>

Більше посилань можна побачити тут .


1
він отримує помилку "ключ не визначений". чи потрібно спочатку визначити v-модель? якщо так, то як?
hphp

Так, ви можете встановити будь-яке ім'я для заміни ключа. Але переконайтеся, що це властивість даних.
ramwin

Я все ще не розумію .. я знаю, що можу перейменувати його на будь-яке ім'я, але я отримую попередження "[Vue warn]: властивість або метод" вибраний "не визначено в екземплярі, але на нього посилаються під час візуалізації. Переконайтеся, що це властивість реактивна, або в опції даних, або для компонентів на основі класу, шляхом ініціалізації властивості "
hphp

Можливо, у вашому сценарії є помилка, оскільки в сценарії немає слова "вибране". Будь ласка, перевірте це та зверніться до посилання у відповіді. Я додаю в нього демонстраційний приклад.
ramwin

"вибраний" - це моя назва моделі. якщо я перепишу ваш код, моє попередження стане "ключовим" не визначено
hphp

37

@ - це ярлик для 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, зробіть це так:

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

Сподіваюся, це допомагає :-)


Я отримую таку помилку, коли виконую другу у vuejs: Uncaught TypeError: Не вдається прочитати властивість 'apply' з undefined
TheDevWay

Я ніде в Кодексі не використовував "застосовувати". Не могли б ви поділитися кодом, в якому ви отримуєте помилку?
Сантану Бера

23

Змінене значення буде в 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

Ви також можете використовувати 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>

Як додати текст введення залежить від обраного варіанту?
Angel

0

Ви можете зберегти свої @ change = "onChange ()" користувачі, які спостерігають за використанням. Vue обчислює і дивиться, він призначений для цього. Якщо вам потрібно лише значення, а не інші складні атрибути Події.

Щось на зразок:

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

Зверніть увагу, що спостерігачі дорогі. вищезазначене також можна досягти як обчислювану властивість, що набагато дешевше.
Рамеш Парік,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.