Vue.js nhận tùy chọn đã chọn trên @change


102

Đầu tiên, tôi muốn nói rằng tôi là người mới đối với Vue, và đây là dự án đầu tiên của tôi sử dụng Vue. Tôi có combobox và tôi muốn làm điều gì đó khác biệt dựa trên combobox đã chọn. Tôi sử dụng tệp vue.html và tệp typecript riêng. Đây là mã của tôi.

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

và đây là tệp ts của tôi

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

Làm cách nào để nhận giá trị tùy chọn đã chọn trong hàm sắp chữ của tôi? Cảm ơn.

Câu trả lời:


190

Sử dụng v-modelđể ràng buộc giá trị của giá trị của tùy chọn đã chọn. Đây là một ví dụ .

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

Tham khảo thêm có thể được nhìn thấy từ đây .


1
nó nhận được lỗi "khóa không được xác định". tôi có phải xác định mô hình v trước không? nếu có, làm thế nào?
hphp

Có, bạn có thể đặt bất kỳ tên nào để thay thế khóa. Nhưng hãy đảm bảo rằng đây là một thuộc tính của dữ liệu.
ramwin

Tôi vẫn, không hiểu .. tôi biết tôi có thể đổi tên nó thành bất kỳ tên nào, nhưng tôi nhận được cảnh báo "[Vue warning]: Thuộc tính hoặc phương thức" đã chọn "không được xác định trên phiên bản nhưng được tham chiếu trong khi kết xuất. Hãy đảm bảo rằng điều này tài sản là phản ứng, hoặc trong các tùy chọn dữ liệu, hoặc cho các thành phần dựa trên lớp, bằng cách khởi tạo tài sản"
hphp

Có thể có lỗi đánh máy trong tập lệnh của bạn vì không có từ 'được chọn' trong tập lệnh. Vui lòng kiểm tra nó và tham khảo liên kết trong câu trả lời. Tôi thêm một ví dụ demo trong đó.
ramwin

"được chọn" là tên kiểu máy của tôi. nếu tôi viết lại mã của bạn, cảnh báo của tôi sẽ trở thành "chìa khóa" không được định nghĩa
hphp

37

@ là một tùy chọn phím tắt cho v-on . Chỉ sử dụng @ khi bạn muốn thực thi một số phương thức Vue. Vì bạn không thực thi các phương thức Vue, thay vào đó bạn đang gọi hàm javascript, bạn cần sử dụng thuộc tính onchange để gọi hàm 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);
}

Nếu bạn muốn gọi các phương thức Vue, hãy làm như thế này-

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

Bạn có thể sử dụng thuộc tính dữ liệu v-model trên phần tử select để liên kết giá trị.

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

Hi vọng điêu nay co ich :-)


Tôi gặp lỗi sau khi thực hiện lỗi thứ hai trong vuejs: Uncaught TypeError: Không thể đọc thuộc tính 'apply' của undefined
TheDevWay

Tôi chưa sử dụng "áp dụng" ở bất kỳ đâu trong Quy tắc. Bạn có thể vui lòng chia sẻ mã mà bạn đang gặp lỗi không?
santanu bera

23

Giá trị đã thay đổi sẽ ở 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

Bạn cũng có thể sử dụng mô hình v để giải cứu

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

Làm cách nào để nối văn bản đầu vào tùy thuộc vào tùy chọn đã chọn?
Thiên thần

0

Bạn có thể lưu @ change = "onChange ()" của mình vào một trình theo dõi sử dụng. Vue tính toán và đồng hồ, nó được thiết kế cho điều đó. Trong trường hợp bạn chỉ cần giá trị chứ không cần các thuộc tính Sự kiện phức tạp khác.

Cái gì đó như:

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

Xin lưu ý rằng đồng hồ đắt tiền. điều trên cũng có thể đạt được dưới dạng tài sản tính toán, rẻ hơn nhiều.
Ramesh Pareek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.