[javascript] Vue.js—v- 모델과 v- 바인드의 차이점
나는 온라인 과정으로 Vue를 배우고 있으며 강사는 기본값으로 입력 텍스트를 만드는 연습을주었습니다. v-model을 사용하여 완성했지만 강사는 v-bind : value를 선택했는데 그 이유를 이해할 수 없습니다.
누군가이 두 가지의 차이점과 각각을 더 잘 사용할 때의 간단한 설명을 해 줄 수 있습니까?
답변
에서 여기 – 기억 :
<input v-model="something">
본질적으로 다음과 같습니다.
<input
v-bind:value="something"
v-on:input="something = $event.target.value"
>
또는 (약식 구문) :
<input
:value="something"
@input="something = $event.target.value"
>
양식 입력에 대한 양방향 바인딩도 마찬가지 v-model
입니다 . 그것은 결합 하는 JS 값 가져 마크 업에, 그리고 할 JS 값을 업데이트 .v-bind
v-on:input
가능하면 사용하십시오 v-model
. 당신이해야 할 때 v-bind
/ 사용 v-on
🙂 나는 당신의 대답이 받아 들여지기를 바랍니다.
v-model
모든 기본 HTML 입력 유형 (텍스트, 텍스트 영역, 숫자, 라디오, 확인란, 선택) 과 함께 작동합니다 . 모델이 날짜를 ISO 문자열 (yyyy-mm-dd)로 저장 v-model
하는 input type=date
경우 사용할 수 있습니다 . 모델에서 날짜 객체를 사용하려면 (조작하거나 포맷하자마자 좋은 아이디어입니다) 이렇게하십시오 .
v-model
알아두면 좋은 몇 가지 추가 정보가 있습니다. IME (많은 모바일 키보드 또는 중국어 / 일본어 / 한국어)를 사용하는 경우 단어가 완성 될 때까지 (공백을 입력하거나 사용자가 필드를 떠날 때까지) v-model이 업데이트되지 않습니다. v-input
훨씬 자주 발사됩니다.
v-model
또한 수정이있다 .lazy
, .trim
, .number
, 덮여 다큐먼트 .
답변
간단하게 말하면
v-model
위한 양방향 바인딩 방법 : 당신이 입력 값을 변경하는 경우, 바인딩 된 데이터가 변경 반대한다 .
그러나 v-bind:value
호출 결합 편도 : 즉 그 는 바인딩 데이터를 변경하여 입력 값을 변경할 수 있지만,이 요소를 통해 입력 된 값을 변화시킴으로써 바운드 데이터를 변경할 수없는 .
이 간단한 예를 확인하십시오 : https://jsfiddle.net/gs0kphvc/
답변
v- 모델
그것은 양방향 데이터 바인딩이며, 입력 값을 변경할 때 html 입력 요소를 바인딩하는 데 사용되며 바인딩 된 데이터가 변경됩니다.
v-model은 HTML 입력 요소에만 사용됩니다.
ex: <input type="text" v-model="name" >
v- 바인드
그것은 한 가지 방법으로 데이터 바인딩이며, 입력 요소에만 데이터를 바인딩 할 수 있지만 제한된 데이터 변경 입력 요소를 변경할 수는 없습니다.
v-bind는 html 속성
ex 를 바인딩하는 데 사용됩니다 .
<input type="text" v-bind:class="abc" v-bind:value="">
<a v-bind:href="home/abc" > click me </a>
답변
v-model is for two way bindings means: if you change input value, the bound data will be changed and vice versa. but v-bind:value is called one way binding that means: you can change input value by changing bound data but you can't change bound data by changing input value through the element.
v-model is intended to be used with form elements. It allows you to tie the form
element (e.g. a text input) with the data object in your Vue instance.
Example: https://jsfiddle.net/jamesbrndwgn/j2yb9zt1/1/
v-bind is intended to be used with components to create custom props. This allows you to pass data to a component. As the prop is reactive, if the data that’s passed to the component changes then the component will reflect this change
Example: https://jsfiddle.net/jamesbrndwgn/ws5kad1c/3/
이것이 기본 이해에 도움이되기를 바랍니다.
답변
사용하고 싶지 않은 경우가 있습니다 v-model
. 두 개의 입력이 있고 서로 의존하는 경우 순환 참조 문제가 발생할 수 있습니다. 일반적인 사용 사례는 회계 계산기를 만드는 경우입니다.
이러한 경우 감시자 또는 계산 된 속성을 사용하는 것은 좋지 않습니다.
대신, v-model
위의 답변이 나타내는 것처럼 귀하를 가져 와서 나누십시오.
<input
:value="something"
@input="something = $event.target.value"
>
실제로,이 방법으로 논리를 분리하는 경우 메소드를 호출 할 수 있습니다.
실제 시나리오에서 다음과 같이 보입니다.
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<input :value="extendedCost" @input="_onInputExtendedCost" />
<p> {{ extendedCost }}
</div>
<script>
var app = new Vue({
el: "#app",
data: function(){
return {
extendedCost: 0,
}
},
methods: {
_onInputExtendedCost: function($event) {
this.extendedCost = parseInt($event.target.value);
// Go update other inputs here
}
}
});
</script>