Vue.js在@change上获得选择的选项


108

首先,我想对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);
}

如何在我的打字稿功能中获取选定的选项值?谢谢。

Answers:


200

使用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警告]:属性或方法” selected”未在实例上定义,但在渲染期间被引用。请确保属性是反应性的,无论是在数据选项中,还是对于基于类的组件,
均可

脚本中可能有错字,因为脚本中不存在单词“ selected”。请检查并参考答案中的链接。我在其中添加了一个演示示例。
ramwin

“ selected”是我的型号名称。如果我重写您的代码,则我的警告将变为“ key”(未定义)
hphp

38

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

您可以在select元素上使用v-model数据属性来绑定值。

<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中执行第二个错误时,出现以下错误:未捕获的TypeError:无法读取未定义的属性“ apply”
TheDevWay

我没有在代码中的任何地方使用“应用”。您能否分享出现错误的代码?
santanu bera

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>


8

您也可以使用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>

如何附加输入文本取决于所选选项?
天使

0

您可以保存@ change =“ onChange()”使用观察者。Vue进行计算和监视,就是为此而设计的。如果您只需要该值,而无需其他复杂的事件属性。

就像是:

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

请注意,观察者很昂贵。以上还可以通过计算属性来实现,这要便宜得多。
Ramesh Pareek
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.