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

예, 키를 대체 할 이름을 설정할 수 있습니다. 그러나 이것이 데이터의 속성인지 확인하십시오.
ramwin

나는 여전히 그것을 얻지 못한다. 나는 그것을 어떤 이름으로도 바꿀 수 있다는 것을 알고있다. 그러나 나는 경고 "[Vue warn] :"selected "속성이나 메소드가 인스턴스에 정의되어 있지 않지만 렌더링하는 동안 참조된다. 속성은 속성을 초기화하여 데이터 옵션 또는 클래스 기반 구성 요소에 반응합니다. "
hphp

스크립트에 '선택된'단어가 없기 때문에 스크립트에 오타가있을 수 있습니다. 그것을 확인하고 답변의 링크를 참조하십시오. 여기에 데모 예제를 추가합니다.
ramwin

"선택됨"은 내 모델 이름입니다. 코드를 다시 작성하면 경고가 "키"가 정의되지 않았습니다
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);
    }
  }
})

선택 요소에서 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에서 두 번째를 실행할 때 다음 오류가 발생합니다. Uncaught TypeError : undefined 속성 '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-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>

선택한 옵션에 따라 어떻게 입력 텍스트를 추가합니까?
Angel

0

사용 감시자를 @ change = "onChange ()" 로 저장할 수 있습니다 . Vue는 컴퓨팅과 감시를 위해 설계되었습니다. 다른 복잡한 이벤트 속성이 아닌 값만 필요한 경우.

다음과 같은 것 :

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

관찰자는 비싸다는 점에 유의하십시오. 위의 값은 계산 된 속성으로도 얻을 수 있으며 훨씬 더 저렴합니다.
Ramesh Pareek 19.10.06
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.