럿고의 개발 노트

[Goorm] Vue.js로 시작하는 SPA개발 Chapter5. Directives 본문

Vue.js Note/[Goorm] Vue.js로 시작하는 SPA 개발(동영상강의)

[Goorm] Vue.js로 시작하는 SPA개발 Chapter5. Directives

KimSeYun 2019. 11. 28. 18:31

[Goorm] Vue.js로 시작하는 SPA개발

5. Directives

5.1. Directive의 개념과 v-for


● 참고문서


- 조건부 랜더링(Conditional Rendering) : https://kr.vuejs.org/v2/guide/conditional.html

- 리스트 랜더링 - 반복문(List Rendering) : https://kr.vuejs.org/v2/guide/list.html

- 이벤트 핸들링 - JavaScript Event (Event Handling) : https://kr.vuejs.org/v2/guide/events.html

- 폼 입력 바인딩 - Data Binding (Form Input Bindings) : https://kr.vuejs.org/v2/guide/forms.html



● Directive


- 'v-' prefix(접두사)를 가지고 있음.

- 보간법이라는 의미로 위치 지정자라고 함.

- Interpolation만으로는 힘든 각종 효과들을 쉽게 적용(가장 큰 장점)

■ 조건문, 반복문, 이벤트 등등

- 어떤 Directive는 인자를 받을 수 있음

■ v-bind:href="url" // href를 인사로 받아서 url이라는 변수를 href에 bind시키는 것



● v-for


- 동일한 형태의 항목들에 대해서 반복적으로 표시

- 대부분의 에디터에서는 :key를 사용하도록 권장

■ 고유한 Key값을 통해, 항목들이 예측 가능한 순서로 나타내기 위함

 https://kr.vuejs.org/v2/style-guide/index.html#v-for-%EC%97%90-key-%EC%A7%80%EC%A0%95-%ED%95%84%EC%88%98

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>[Groom]Vue.js로 시작하는 SPA개발 - Chapter05 - Ex1</title>
<!-- Vue.js 추가 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id = "app">
<ul>
<li v-for="(item, index) in items" :key="index">{{item }}</li>
<!--
v-for : 배열을 기반으로 리스트를 렌더링 할수 있음
item in itmes 형태로 특별한 문법이 필요
여기서 items은 원본 데이터 배열, itme은 반복 배열 엘리먼트 별칭
:key : 개별 DOM 노드들을 추적하고 기존 엘리먼트를 재사용, 재정렬하기 위해서 v-for의 각 항목들에 고유한 key 속성을 제공해야 함.
-->
</ul>
</div>
<script>
let vm = new Vue({ // Vue 생성
el:"#app", // app이라는 id를 가지고 있는 element 선택
data: { // 데이터(변수) 설정
items:["Hello","Vue","from","ruto"] // items라는 배열 설정
}
})
</script>
</body>
</html>
view raw VueEx1.html hosted with ❤ by GitHub


5.2. v-if 알아보기


● v-if : 조건문


- v-if / v-else-if / v-eles

■ boolean값을 이용해 보여주는 것에 대한 조작을 할 수 있음

■ v-if의 Toggle Cost(화면에 그려지거나 그려지지 않는데 사용되는 비용)가 크다고 함



5.3. v-if 예제 실습


● 실습 코드


<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>[Groom]Vue.js로 시작하는 SPA개발 - Chapter05 - Ex2</title>
<!-- Vue.js 추가 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<p v-if="isNotClicked">Not Clicked!</p> <!--클릭이 없으면 이 p 태그 표시-->
<p v-else-if="lessThanClicks">Clicked {{ clicks }} times!</p> <!--클리이 10번 이하면 이 p 태그 표시-->
<p v-else>Too many Clicks!</p> <!-- 클릭이 10번 초과되면 이 p 태그 표시-->
<button v-on:click = "clickedHandler">Click Me!</button> <!-- 이 버튼을 클릭할때 마다 clicks 변수의 값이 1씩 올라감-->
<!-- v-on은 이벤트 핸들러로 click하면 메소드(이벤트)를 실행하는 것-->
</div>
<script>
let vm=new Vue({ // Vue 생성
el:"#app", // app이라는 id를 가지고 있는 element 설정
data:{
clicks:0 // clicks이라는 변수 및 데이터 선언
},
methods: { // 메소드 선언
clickedHandler(){ // 버튼을 클릭시 clicks이 1씩 증가
this.clicks++;
}
},
computed: { // computed 선언
isNotClicked : function(){ // clicks이 0인 경우
return this.clicks==0;
},
lessThanClicks : function(){ // clicks가 10번 이하인 경우
return this.clicks<=10;
}
}
})
</script>
</body>
</html>
view raw VueEx1.html hosted with ❤ by GitHub


5.4. v-model 알아보기 & 실습


● v-model : (Form Input) Data Binding


- input DOM에 Data Binding을 설정하는 것

■ 대부분의 input Type에서 가능

■ text, textarea, checkbox, radio, select

■ JavaScript의 document.getElementByTagName("input")[0].value를 사용하는 것과 같은 효과

■ Modifier를 이용해 input값을 다듬을 수 있음

■ .number : String을 Numeric 값으로 TypeCast

■ .trim : 앞 뒤 WhiteSpace들을 정리

■ .lazy : input DOM에서 포커스가 나갔을 때 Updata(연속된 이벤트 발생 방지)



● 실습 코드


<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>[Groom]Vue.js로 시작하는 SPA개발 - Chapter05 - Ex3</title>
<!-- Vue.js 추가 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id ="app">
<input type="text" name="ex" id="ex" v-model.lazy="inputValue1"> <!--.lazy : 커서(포커스)가 벗어나면 값에 넣기-->
<p>{{ inputValue1 }}</p>
<input type="text" name="ex" id="ex" v-model.trim="inputValue2"> <!-- whiteSpace 방지 -->
<p>{{ inputValue2 }}</p>
<select name="ex-sel" id="ex-sel" v-model="seelctValue">
<option value="hello">Hello</option>
<option value="world">World</option>
</select>
</div>
<script>
let vm = new Vue({ // Vue 생성
el:"#app", // app이라는 id를 가지고 있는 element 선택
data:{ // 변수(데이터) 선언
inputValue1:"", // v-model.lazy 예제 데이터
inputValue2:"", // v-model.trim 예제 데이터
seelctValue:null // select 예제 데이터
}
})
</script>
</body>
</html>
view raw VueEx1.html hosted with ❤ by GitHub


5.5. v-on 알아보기


● v-on : Event Handling


- Native DOM Event와 Custom Event 모두 조작 가능

■ 특히, Modifier를 이용해서 특정 이벤트만 골라서 적용 가능


★ Native DOM Event : 이미 설정되어 있는 이벤트

★ Custom Event : 어떤 목적에 의해 초기화된 이벤트 및 사용자가 만든 이벤트



5.6. v-on 예제 실습


● 실습 코드


<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>[Groom]Vue.js로 시작하는 SPA개발 - Chapter05 - Ex4</title>
<!-- Vue.js 추가 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id ="app">
<p v-on:copy.prevent="isCopied">중요한 정보(복사 X)</p>
<!-- v-on:copy.prevent : copy의 이벤트를 막으라는 의미(즉, 복사가 안되게 설정) -->
</div>
<script>
let vm = new Vue({ // Vue 생성
el:"#app", // app이라는 id를 가지고 있는 element 선택
methods: { // 메소드 선언
isCopied(){ // 복사하려고 하면 alert창 뜨게 함.
alert("저작권법 위반입니다.");
}
},
})
</script>
</body>
</html>
view raw VueEx1.html hosted with ❤ by GitHub




● 실습 코드 Github 및 출처


- 실습 코드 : https://github.com/ksy90101/Vue.js/tree/master/%5BGoorm%5DVue.js/Chapter05

- 출처 : https://edu.goorm.io/learn/lecture/13020/vue-js%EB%A1%9C-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-spa-%EA%B0%9C%EB%B0%9C




Comments