방명록
- [개발자의품격][부트캠프][1기][19차시] Vue.js #4 | extra2022년 03월 07일 16시 11분 10초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
extra
v-if
HTML DOM 요소를 보이기/숨기기 위해 실무에서는 v-if 문법을 주로 사용한다. 사용자의 권한에 따라 부여하는 기능을 달리할 때 사용할 수 있다. if 문은 순차적으로 비교하므로 "일반 사용자 > 매니저 > 관리자" 순으로 사용자가 많으므로 이를 감안하여 순서를 설계하는 것이 유리하다.
<template> <div v-if="userRole === 'G'"> <button>조회</button> </div> <div v-else-if="userRole === 'M'"> <button>생성</button> <button>조회</button> </div> <div v-else> <button>생성</button> <button>조회</button> <button>삭제</button> </div> </template> <script> export default { components: {}, data() { return { userRole: 'A' // A - 관리자, M - 매니저, G - 일반사용자 } } } </script>
v-show
v-if는 [그림 2]와 같이 HTML DOM 요소를 생성/삭제한다. DOM 트리를 리페인팅하기 때문에 리소스를 많이 사용한다. 반면 v-show는 [그림 3]과 같이 style에서 보이기/감추기 처리를 한다. 개발자는 사용자의 UX를 항상 고려해야 한다. 이러한 태도는 코드를 개선하는 것보다 더 중요하다.
<template> <div> <input type="radio" name="" id="ai" v-model="favorite" value="AI" /> <label for="ai">인공지능</label> <input type="radio" name="" id="blockchain" v-model="favorite" value="BC" /> <label for="blockchain">블록체인</label> <input type="radio" name="" id="iot" v-model="favorite" value="IOT" /> <label for="iot">사물인터넷</label> <input type="radio" name="" id="other" v-model="favorite" value="OTH" /> <label for="other">기타</label> <div v-show="favorite === 'OTH'"> <!-- <div v-if="favorite === 'OTH'"> --> <input type="text" name="" id="" v-model="otherValue" /> </div> </div> </template> <script> export default { components: {}, data() { return { favorite: '', otherValue: '' } } } </script>
computed
computed는 새로인 키를 만들 수 있고, 참조하고 있는 다른 데이터 키의 변경 사항을 실시간으로 감지한다. 실무에서는 로그인 사용자 정보를 담기 위해 사용한다.
<template> <div> <div> <input type="text" name="" id="" v-model="firstName" /> <input type="text" name="" id="" v-model="lastName" /> </div> <div> <h1>Welcome, {{ title }} {{ firstName }} {{ lastName }}</h1> <h1>computed: Welcome, {{ fullName }}</h1> </div> <div> <p>Welcome, {{ title }} {{ firstName }} {{ lastName }}</p> </div> <div> <h3>Welcome, {{ title }} {{ firstName }} {{ lastName }}</h3> </div> </div> </template> <script> export default { components: {}, data() { return { firstName: '일남', lastName: '김', middleName: '', title: 'Mr. ' } }, computed: { fullName() { return this.title + ' ' + this.firstName + ' ' + this.lastName } } } </script>
watch
computed는 변경사항을 감지하여 새로운 데이터를 만들어낸다. 반면 watch는 변경사항만 감지한다. 기존 값에 대하여 사용자가 변경한 값에 대한 history를 기록할 때 유용하다.
<template> <div> <div> <input type="text" name="" id="" v-model="firstName" /> <input type="text" name="" id="" v-model="lastName" /> </div> <div> <h1>Welcome, {{ title }} {{ firstName }} {{ lastName }}</h1> </div> </div> </template> <script> export default { components: {}, data() { return { firstName: '일남', lastName: '김', middleName: '', title: 'Mr. ' } }, watch: { // 함수명을 데이터의 키값과 동일하게 선언한다. firstName() { console.log(this.firstName) } } } </script>
watch는 기존 값에 대하여 사용자가 변경한 값에 대한 history를 기록할때 유용하다.
<template> <div> <select name="" id="" v-model="selected"> <option value="A">A</option> <option value="B">B</option> <option value="C">C</option> </select> </div> </template> <script> export default { components: {}, data() { return { selected: '', changeHistory: [] } }, watch: { selected(newValue, oldValue) { this.changeHistory.push(newValue) console.log(this.changeHistory) } } } </script>
728x90반응형'영광의 시대! > 2022 개발자의 품격 부트캠프 1기' 카테고리의 다른 글
[개발자의품격][부트캠프][1기][19차시] Vue.js #6 | 재사용 컴퍼넌트에 부트스트랩 적용 (0) 2022.03.07 [개발자의품격][부트캠프][1기][19차시] Vue.js #5 | 재사용 콤퍼넌트 (0) 2022.03.07 [개발자의품격][부트캠프][1기][19차시] Vue.js #3 | event (0) 2022.03.07 [개발자의품격][부트캠프][1기][18차시] Vue.js #2 | 데이터바인딩 (0) 2022.03.05 [개발자의품격][부트캠프][1기][17차시] Vue.js #1 | 설치, 스니핏 설정, 프로젝트 생성, 구조, 라우터 (0) 2022.03.05 다음글이 없습니다.이전글이 없습니다.댓글