[javascript] v-model이 변경 될 때 이벤트를 발생시키는 방법은 무엇입니까?

나는를 사용하여 foo()기능을 실행 하려고하는데 @click, 알 수 있듯이 이벤트를 올바르게 실행하려면 라디오 버튼을 두 번 눌러야합니다. 두 번째로 누를 때만 값을 잡습니다.

(srStatus)가 변경 @click될 때만 이벤트를 시작하지 않고 이벤트를 시작하고 싶습니다 v-model.

여기 내 바이올린이 있습니다.

http://fiddle.jshell.net/wanxe/vsa46bw8/



답변

이것은 click라디오 버튼의 값이 변경되기 전에 핸들러가 실행되기 때문에 발생합니다 . change대신 이벤트 를 수신해야합니다 .

<input
  type="radio"
  name="optionsRadios"
  id="optionsRadios2"
  value=""
  v-model="srStatus"
  v-on:change="foo"> //here

또한, 정말로 foo()준비 상태 로 전화하고 싶은지 확인하십시오 … 실제로 그렇게하고 싶지 않은 것 같습니다.

ready:function(){
    foo();
},


답변

v-on지시문 을 제거하여 실제로 이것을 단순화 할 수 있습니다 .

<input type="radio" name="optionsRadios" id="optionsRadios1" value="1" v-model="srStatus">

그리고 watch방법을 사용하여 변경 사항을 수신하십시오.

new Vue ({
    el: "#app",
    data: {
        cases: [
            { name: 'case A', status: '1' },
            { name: 'case B', status: '0' },
            { name: 'case C', status: '1' }
        ],
        activeCases: [],
        srStatus: ''
    },
    watch: {
        srStatus: function(val, oldVal) {
            for (var i = 0; i < this.cases.length; i++) {
                if (this.cases[i].status == val) {
                    this.activeCases.push(this.cases[i]);
                    alert("Fired! " + val);
                }
            }
        }
    }
});


답변

Vue2 : 입력 흐림의 변화 만 감지하려면 (예 : Enter를 누르거나 다른 곳을 클릭 한 후) 수행하십시오 (자세한 내용은 여기 ).

<input @change="foo" v-model... >

단일 문자 변경을 감지하려면 (사용자 입력 중)

<input @keydown="foo" v-model... >

@keyup@input이벤트를 사용할 수도 있습니다 . 추가 매개 변수를 전달하려면 템플릿에서 사용하십시오 @keyDown="foo($event, param1, param2)". 아래 비교 ( 여기에서 편집 가능한 버전 )


답변

다음을 사용해야합니다 @input.

<input @input="handleInput" />

@input 사용자가 입력 값을 변경할 때 발생합니다.

@change 사용자가 값을 변경하고 입력 초점을 해제하면 실행됩니다 (예 : 외부에서 클릭).

https://jsfiddle.net/posva/oqe9e8pb/ 에서 차이점을 확인할 수 있습니다.


답변

위의 정답에 추가하기 위해 Vue.JS v1.0에서 다음과 같이 작성할 수 있습니다.

<a v-on:click="doSomething">

따라서이 예에서는

 v-on:change="foo"

참조 : http://v1.vuejs.org/guide/syntax.html#Arguments


답변