일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- gradle
- stopPropogation
- openapi3
- MSA
- JavaScript
- Spring Batch
- REACT
- Reduxpender
- cheerio
- T-OTP
- tasklet
- 리액트
- Spring REST Docs
- Flyway
- AuthenticatoinProvide
- OpenStack
- Filter
- SWAGGER
- Crawling
- MFA
- SpringBoot
- axios
- UsernamePasswordAuthenticationFilter
- SpringRESTDocs
- Spring Security
- cloud native
- vue
- Pender
- preventdefault
- vuejs
- Today
- Total
Miracle Morning, LHWN
세 번째 수업. 210227 본문
# 데이터의 흐름
(1) 상위(Root) → 하위 방향으로 데이터 넘기기 : props 를 사용하여 전달
(2) 하위 → 상위 방향으로 데이터 넘기기 : event 를 발생하거나, Vue 에서는 API 의 형식으로 전달
# jQuery 사용해보기
→ mounted 단계 이후에만 사용 가능하다. (DOM 에 접근이 가능해야 하기 때문)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <!-- CDN -->
<h1 class='h1-btn'>...</h1>
...
$('.h1-btn').on({
click: function() {
alert('jQuery Click Event!')
},
focusin: function() {
console.log('jQuery focusin Event!');
},
mouseenter: function() {
console.log('jQuery mouseenter Event!');
}
});
# click: function() {...} 방식을 리터럴 함수 (= 익명함수)라고 부른다.
위 jQuery를 Vue 안에서 사용한 예제를 보자.
const header = new Vue({
el: '#header',
data: {
msg: 'A Data Message of Vue Instance',
dynamicMsg: '수정?',
number: 100
},
methods: {
...
mounted: function() {
console.log('LifeCycle: mouted > jQuery 사용 가능');
let that = this;
$('.h1-btn').on({
click: function() {
alert('jQuery Click Event!');
console.log(that.number);
// console.log(that.number); // 이렇게 접근하면 NaN 이 나옴
},
focusin: function() {
console.log('jQuery focusin Event!');
},
mouseenter: function() {
console.log('jQuery mouseenter Event!');
},
mouseleave: function() {
console.log('jQueyr mouseleave Event!');
}
});
},
...
근데 이때 $('.h1-btn').on({...}) 안에서 header 객체의 number 을 출력하기 위해 this.number 로 접근하면 NaN 이 나온다.
왜냐면 ${ } 이용해서 jQuery 안에서 this 를 사용하면 header 를 가리키는게 아니라 $('.h1-btn') 버튼 자체로 인식하기 때문이다.
따라서 위 부분에서 let that = this; 를 통해 that 에 header 를 잠시 담아두고 jQuery 내부에서 that.number 를 통해 접근해야한다.
Directive: v-if
<h2 v-if='a'>조건문(v-if)이 참(True)인 경우</h2>
<h2 v-if='b'>조건문(v-if)이 거짓(False)인 경우</h2>
...
const obj = new Vue({
el: '#app',
data: {
a: true,
b: false,
...
Directive: v-if ~ v-else-if ~ v-else
<div class="if-box">
<ol>
<li v-if='choice1'>A</li>
<li v-else-if='choice2'>B</li>
<li v-else>C</li>
</ol>
</div>
...
const obj = new Vue({
el: '#app',
data: {
a: true,
b: false,
...
choice1: false,
choice2: true
},
Directive: v-bind
<h3><a v-bind:href="url2" v-bind:title='urltitle'>Vue.js 바로가기</a></h3>
<img v-bind:src='imageUrl' v-bind:alt='imgalt' v-bind:title='imgtitle'>
// v-bind: 는 그냥 : 로도 생략이 가능하다
// <img :src='imageUrl' :alt='imgalt' :title='imgtitle'>
<h2>오늘의 날짜 : {{ currentDate }}</h2>
<h2>오늘의 날짜 : {{ currentDate.getFullYear() }} {{ currentDate.getMonth() + 1 }} {{ currentDate.getDate() }} {{ currentDate.getDay() }}</h2>
...
const obj = new Vue({
el: '#app',
data: {
a: true,
b: false,
url2: 'https://vuejs.org/',
imageUrl: './image/ha.jpeg',
imgalt: 'Alternative Text',
urltitle: 'vuejs 바로가기',
imgtitle: 'imgtitle',
currentDate: new Date(),
...
<img v-bind:src='imageUrl' v-bind:alt='imgalt' v-bind:title='imgtitle'>
<img :src='imageUrl' :alt='imgalt' :title='imgtitle'>
v-bind: 는 그냥 : 로도 생략이 가능하다
Directive: v-model
# selectBox 예제
<select name="Alphabet" id="Alphabet" v-model='select'>
<option value="">옵션을 선택하세요.</option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
</select>
<h3>선택 옵션 : {{ select }}</h3>
...
data: {
a: true,
b: false,
...
currentDate: new Date(),
select: '',
# checkBox 예제
<h2>체크박스 model</h2>
<div class="check-box">
<input type="checkbox" id="chk1" value="Check 1" v-model="chk"><label for="chk1">Check 1</label>
<input type="checkbox" id="chk2" value="Check 2" v-model="chk"><label for="chk2">Check 2</label>
<input type="checkbox" id="chk3" value="Check 3" v-model="chk"><label for="chk3">Check 3</label>
<input type="checkbox" id="chk4" value="Check 4" v-model="chk"><label for="chk4">Check 4</label>
<input type="checkbox" id="chk5" value="Check 5" v-model="chk"><label for="chk5">Check 5</label>
</div>
<h2>체크된 옵션 : {{ chk }}</h2>
...
const obj = new Vue({
el: '#app',
data: {
a: true,
b: false,
...
select: '',
chk: [] // 배열로 해주어야 값이 누적
},
# radioButton 예제
<h2>RadioButton model</h2>
<div class="radio-box">
<input type="radio" name="radio" id="radio1" value="Female" v-model="radio"><label for="radio1">Female</label>
<input type="radio" name="radio" id="radio2" value="Male" v-model="radio"><label for="radio2">Male</label>
<input type="radio" name="radio" id="radio3" value="Androgynous" v-model="radio"><label for="radio3">Androgynous</label>
</div>
<h2>체크된 옵션 : {{ radio }}</h2>
...
const obj = new Vue({
el: '#app',
data: {
a: true,
b: false,
...
select: '',
chk: [],
radio: '',
},
※ label 에서 for 는 반드시 id 로 연동한다.
※ checkbox 는 다수 선택, radiobutton 은 하나만 선택
※ radiobutton 은 name 이 반드시 같아야 하며, checkbox 의 name 은 가급적 다르게 설정한다.
# <Input> 을 이용한 응용 v-model
<h2>입력상자 텍스트를 이용한 응용 v-model</h2>
<div class="text-box">
<label for="customerName">입력 : </label>
<input type="text" name='name' id='customerName' v-model='value' v-on:keyup='eventFn'>
<h2>입력된 값 : {{ value }}</h2>
<h3 v-show='x'>값을 입력하세요.</h3>
</div>
...
const obj = new Vue({
el: '#app',
data: {
a: true,
b: false,
...
choice1: false,
choice2: true,
value: '',
x: true
},
methods: {
eventFn: function() {
this.x = false;
}
}
});
※ keyup : 키 입력 후 발생하는 이벤트
'IT 기술 > [Vue] 개발자 강의' 카테고리의 다른 글
두 번째 수업. 210221 (0) | 2021.06.02 |
---|---|
두 번째 수업. 210221_궁금해서 찾아본 이것저것 (0) | 2021.06.02 |
첫 번째 수업. 210220 (0) | 2021.06.02 |
첫 번째 수업. 210220_궁금해서 찾아본 이것저것 (0) | 2021.06.02 |