- body -
<!-- // 01 - text -->
<div id="app-1">
<div>
<input type="text" v-model="textVal" v-on:input="eventInput" placeholder="check the console log to watch input event" >
</div>
<div>
<textarea v-model="textVal" cols="30" rows="10" v-on:input="eventInput" placeholder="watch console log to check other element's event"> use v-model instead of {{ textVal }} here</textarea>
</div>
<div>
<p v-html="textVal"></p>
</div>
</div>
<div>----------------------------------------------------<br></div>
<!-- // 02 - checkbox -->
<div id="app-2">
<div>
<input type="checkbox" v-model="checkedItem" v-on:change="eventChangeItem">
<p>{{ checkedItem }}</p>
</div>
<div>
<input type="checkbox" id="item1" value="apple" v-model="checkedList" v-on:change="eventChange4Checkbox">
<label for="item1">i like apple</label>
<input type="checkbox" id="item2" value="mango" v-model="checkedList" v-on:change="eventChange4Checkbox">
<label for="item2">do you want some mango?</label>
<input type="checkbox" id="item3" value="orange" v-model="checkedList" v-on:change="eventChange4Checkbox">
<label for="item3">please give me orange</label>
<input type="checkbox" id="item4" value="melon" v-model="checkedList" v-on:change="eventChange4Checkbox">
<label for="item4">i'm listening to the melon</label>
</div>
<div>
<p>{{ checkedList }}</p>
</div>
</div>
<div>----------------------------------------------------<br></div>
<!-- // 03 - radio -->
<div id="app-3">
<div>
<input type="radio" id="pick1" value="red" v-model="pickedItem" v-on:change="eventChange4Radio">
<label for="pick1">red food is good for health</label>
<input type="radio" id="pick2" value="yellow" v-model="pickedItem" v-on:change="eventChange4Radio">
<label for="pick2">yellow makes me happy</label>
<input type="radio" id="pick3" value="orange" v-model="pickedItem" v-on:change="eventChange4Radio">
<label for="pick3">my favorite color is orange</label>
<input type="radio" id="pick4" value="green" v-model="pickedItem" v-on:change="eventChange4Radio">
<label for="pick4">do you like green?</label>
</div>
<div>
<p>{{ pickedItem }}</p>
</div>
</div>
<div>----------------------------------------------------<br></div>
<!-- // 04 - select -->
<div id="app-4">
<select v-model="selectedVal" v-on:change="eventChange4SelectVal">
<option value="sel1">chicken</option>
<option value="sel2">pizza</option>
<option value="sel3">sushi</option>
<option value="sel4">steak</option>
</select>
<div>
<p>you selected {{ selectedVal }} now</p>
</div>
<select v-model="selectedText" v-on:change="eventChange4SelectText">
<option>chicken</option>
<option>pizza</option>
<option>sushi</option>
<option>steak</option>
</select>
<div>
<p>why don't we eat some {{ selectedText }} tomorrow!</p>
</div>
<select v-model="selectedOpt" v-on:change="eventChange4SelectOpt">
<option v-for="item in optList"> {{ item }}</option>
</select>
<div>
<p>you chose {{ selectedOpt }} for drink!</p>
</div>
<select v-model="selectedDrink" v-on:change="eventChange4SelectObj">
<option v-for="item in optObjList" v-bind:value="item.drink"> {{ item.food }}</option>
</select>
<div>
<p>you selected {{ selectedDrink }} </p>
</div>
<select v-model="selectedObj" v-on:change="eventChange4SelectObj">
<option v-for="item in optObjList" v-bind:value="item"> {{ item.food }}</option>
</select>
<div>
<p>{{ selectedObj.drink }} is recommend drink for your {{ selectedObj.food }}! </p>
</div>
</div>
<div>----------------------------------------------------<br></div>
<!-- //05 - postfix -->
<div id="app-5">
<div>
<input type="text" v-model.number="inputVal" placeholder="with number postfix">
<button v-on:click="checkType" >checkType</button>
</div>
<div>
<input type="text" v-model="inputVal" placeholder="without number postfix">
<button v-on:click="checkType" >checkType</button>
</div>
</div>
<div>----------------------------------------------------<br></div>
- script -
// 00 - v-model 디렉티브
// v-model 디렉티브를 시용하여 input과 textarea 요소에 양방향 데이터 바인딩을 연결할 수 있습니다.
// input type에 따라서 데이터 연결하는 방법이 자동으로 바뀝니다.
// input:text와 textarea는 value 속성과 input 이벤트를 사용합니다.
// input:checkbox와 input:radio는 checked 속성과 change 이벤틀르 사용합니다.
// select는 prop으로 value 를 사용하고, 이벤트로 change를 사용합니다.
// 01 - text
// v-model 을 이용해서 data 속성 안의 변수를 연결할 수 있습니다.
// 사용자가 값을 입력하면 자동으로 data가 바뀌고, 반대로 data가 바뀌면 자동으로 화면에 반영합니다.
// textarea 태그 안에서는 콧수염 {{ }} 문법을 사용할 수 없습니다. 대신 v-model을 사용합니다.
// p 태그에 vue 데이터를 출력하는 방법은 두 가지입니다.
// 하나는 콧수염 문법 {{ textVal }}을 이용하는 것이고, 다른 하나는 v-html 디렉티브를 이용하는 방법입니다.
// input:text와 textarea는 input 이벤트를 사용합니다.
var app1 = new Vue({
el: '#app-1',
data: {
textVal : ''
},
methods: {
eventInput: function() {
console.log('input event: ' + this.textVal);
}
}
});
// 02 - checkbox
// checkbox 하나에 연결된 값은 boolean 값을 가집니다.
// checkbox 여러 개를 하나의 배열에 바인딩할 수도 있습니다.
// 배열에 연결시키면 input 태그에 value 속성으로 넣어 두었던 값이 배열 안으로 들어갑니다.
// label 요소의 for 속성과 checkbox 요소의 id 속성을 같도록 맞춰 주면 클릭할 수 있는 영역이 생깁니다.
var app2 = new Vue({
el: '#app-2',
data: {
checkedItem: false,
checkedList: []
},
methods: {
eventChangeItem: function () {
console.log('checkbox item event:' + this.checkedItem );
},
eventChange4Checkbox: function() {
console.log('checkbox list event:' + this.checkedList);
}
}
});
// 03 - radio
// radio 태그에서 v-model 을 이용하면 같은 data 값에 바인딩된 radio 들을 자동으로 찾아서 묶어줍니다.
// 선택한 radio 태그의 value 값이 v-model 변수 안으로 들어갑니다.
// label 요소의 for 속성과 checkbox 요소의 id 속성을 같도록 맞춰 주면 클릭할 수 있는 영역이 생깁니다. (checkbox와 마찬가지)
var app3 = new Vue({
el: '#app-3',
data: {
pickedItem: '',
},
methods: {
eventChange4Radio: function() {
console.log('radio event:' + this.pickedItem);
}
}
});
// 04 - select
// select 태그에 v-model 을 연결할 수 있습니다.
// option 태그의 value 속성 값이 v-model에 연결된 변수로 들어갑니다.
// option 태그에 value 속성이 없다면 innerText가 v-model 변수 안으로 들어갑니다.
// v-model 로 바인딩된 해당 변수에 초기값을 설정할 수 있습니다.
// list 를 이용하여 동적으로 option 태그를 만들 수 있습니다.
// list 안에는 단순한 text가 요소로 들어갈 수도 있고, 객체가 들어갈 수도 있습니다.
// option 태그의 value 값은 객체 자체를 value 값으로 넣을 수도 있고, 객체의 한 속성만 끄집어내어서 text로 넣을 수도 있습니다.
var app4 = new Vue({
el: '#app-4',
data: {
selectedVal: 'sel1',
selectedText: 'pizza',
optList: ['coke', 'sprite', 'beer'],
selectedOpt: '',
optObjList: [
{food: 'pizza', drink: 'coke'},
{food: 'sushi', drink: 'sprite'},
{food: 'chicken', drink: 'beer'}
],
selectedDrink: '',
selectedObj:{}
},
methods: {
eventChange4SelectVal: function() {
console.log('select val event:' + this.selectedVal);
},
eventChange4SelectText: function() {
console.log('select text event:' + this.selectedText);
},
eventChange4SelectOpt: function() {
console.log('select opt event:' + this.selectedOpt);
},
eventChange4SelectObj: function() {
console.log('select obj event:' + this.optObjList);
},
}
});
// 05 - postfix
// v-model 에 사용할 수 있는 수식어 postfix 도 있습니다.
// .number /=> 사용자가 입력한 값을 자동으로 숫자로 형변환합니다. 만약 문자열이라면 문자열인 채로 둡니다.
// .trim /=> 사용자가 입력한 값에서 공백을 자동으로 제거하는 trim() 을 실행합니다.
var app5 = new Vue({
el: '#app-5',
data: {
inputVal:'',
},
methods: {
checkType: function() {
alert(typeof(this.inputVal));
}
}
});
- 220501
참고자료
반응형
'Vue JS' 카테고리의 다른 글
| Vue.js 에러 Error compiling template: v-bind:value conflicts with v-model (0) | 2022.05.07 |
|---|---|
| Vue.js 셀렉트1 선택값에 따라 셀렉트2 옵션값이 바뀌는 기능 (0) | 2022.05.07 |
| Vue.js 시작하기 08 - 이벤트 핸들링 : v-on, preventDefault , onchange, onclick, oninput (0) | 2022.05.01 |
| Vue.js 시작하기 07 - 리스트 렌더링: v-for 사용법 (0) | 2022.05.01 |
| Vue.js 시작하기 06 - 조건부 렌더링, v-if, v-if-else, v-show (0) | 2022.05.01 |