Vue.jsは@changeで選択されたオプションを取得します


108

まず、Vueは初めてだと言いたいのですが、これはVueを使用した初めてのプロジェクトです。コンボボックスがあり、選択したコンボボックスに基づいて別のことをしたいのですが。私は別々のvue.htmlとtypescriptファイルを使用しています。これが私のコードです。

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

typescript関数で選択したオプション値を取得するにはどうすればよいですか?ありがとう。

回答:


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-modelを定義する必要がありますか?はいの場合、どのように?
hphp 2018年

はい、任意の名前を設定してキーを置き換えることができます。ただし、これがデータのプロパティであることを確認してください。
ramwin 2018年

私はまだそれを取得していません..私はそれを任意の名前に変更できることを知っていますが、警告が表示されます "[Vue warn]:プロパティまたはメソッド" selected "はインスタンスで定義されていませんが、レンダリング中に参照されています。これを確認してくださいプロパティは、データオプションで、またはクラスベースのコンポーネントの場合、プロパティを初期化することで
反応し

スクリプトに「選択された」という単語が存在しないため、スクリプトにタイプミスがある可能性があります。確認して、回答のリンクを参照してください。デモの例を追加します。
ramwin 2018年

「選択済み」は私のモデル名です。コードを書き直すと、警告が「キー」になりますが定義されていません
hphp 2018年

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-modeldata属性を使用して、値をバインドできます。

<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で2番目のエラーを実行すると、次のエラーが発生します。UncaughtTypeError:Undefinedのプロパティ 'apply'を読み取れません
TheDevWay

私はコードのどこにも「適用」を使用していません。エラーが発生しているコードを教えてください。
santanubera19年1

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-modelを使用することもできます

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

ウォッチャーは高価であることに注意してください。上記は、はるかに安価な計算プロパティとしても実現できます。
RameshPareek19年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.