[백견불여일타/Vue.js] 6장 - 조건문 & 반복문
🎁후기
4/1부터 Spring framework를 공부를 시작했습니다. 이 얘기를 지금 vue 포스팅하는 시점에 왜 언급을 하냐면은, 곧 vue를 활용하여 to do list와 게시판 토이 프로젝틀를 할 예정이기 때문입니다. 프론트엔드 공부하는 겸에 spring으로 백 단을 구축해놓으면 더 간지날 것 같습니다.
🍰핵심 키워드
- 조건
- 반복
- v-if
- v-for
🛬개요
이번시간에는 Vue를 활용하여 조건을 만족했을 때 태그가 표시되도록 하는 v-if와, 태그를 특정 횟수만큼 만복하여 표시하는 v-for에 대해 배웁니다. 오늘 주제는 예제가 많습니다.(8개...) 하다보면 빡치긴 합니다. 하지만 그만큼 많이 활용하는 중요한 부분이라는 뜻이겠죠?ㅎㅎ
[01] 조건에 따른 표시 : v-if
4/1부터 Spring framework를 공부를 시작했습니다. 이 얘기를 지금 vue 포스팅하는 시점에 왜 언급을 하냐면은, 곧 vue를 활용하여 to do list와 게시판 토이 프로젝틀를 할 예정이기 때문입니다. 프론트엔드 공부하는 겸에 spring으로 백 단을 구축해놓으면 더 간지날 것 같습니다.
- 조건
- 반복
- v-if
- v-for
🛬개요
이번시간에는 Vue를 활용하여 조건을 만족했을 때 태그가 표시되도록 하는 v-if와, 태그를 특정 횟수만큼 만복하여 표시하는 v-for에 대해 배웁니다. 오늘 주제는 예제가 많습니다.(8개...) 하다보면 빡치긴 합니다. 하지만 그만큼 많이 활용하는 중요한 부분이라는 뜻이겠죠?ㅎㅎ
[01] 조건에 따른 표시 : v-if
이번시간에는 Vue를 활용하여 조건을 만족했을 때 태그가 표시되도록 하는 v-if와, 태그를 특정 횟수만큼 만복하여 표시하는 v-for에 대해 배웁니다. 오늘 주제는 예제가 많습니다.(8개...) 하다보면 빡치긴 합니다. 하지만 그만큼 많이 활용하는 중요한 부분이라는 뜻이겠죠?ㅎㅎ
조건에 따라 HTML 태그를 표시하고 싶을 때 v-if 디렉티브를 사용합니다.
서식
<태그명 v-if="조건"></태그명> <태그명 v-else-if="조건"></태그명> <태그명 v-else></태그명>
"조건"에는 true/false 즉, boolean 값이 들어갑니다.
예제 1 - true일 때만 표시되는 예제
결과
소스코드
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Vue.js sample</title> <link rel="stylesheet" href="style.css" > <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> </head> <body> <div id="app"> <h2 align="center">true일 때만 표시하는 예제</h2> <input type="checkbox" v-model="checked"> 표시 <p v-if="checked"> 체크박스가 ON</p> </div> <script> new Vue({ el:"#app", data:{ checked: false } }) </script> </body> </html> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; } .menu{ background: darkslateblue; padding : 15px; border-radius: 5px; } .menu a{ color: white; padding: 20px; } </style>
예제 2 - true/false를 ON/OFF로 표시
결과
소스코드
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Vue.js sample</title> <link rel="stylesheet" href="style.css" > <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> </head> <body> <div id="app"> <h2 align="center">true와 false를 ON/OFF로 표시하는 예제</h2> <input type="checkbox" v-model="checked"> 표시 <p v-if="checked"> 체크박스가 ON</p> <p v-else> 체크박스가 OFF</p> </div> <script> new Vue({ el:"#app", data:{ checked: false } }) </script> </body> </html> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; } .menu{ background: darkslateblue; padding : 15px; border-radius: 5px; } .menu a{ color: white; padding: 20px; } </style>
예제 3 - 버튼을 클릭하면 버튼을 삭제
결과
소스코드
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Vue.js sample</title> <link rel="stylesheet" href="style.css" > <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> </head> <body> <div id="app"> <h2 align="center">클릭하면 "good" 버튼을 삭제하는 예제</h2> <button v-on:click="deleteButton" v-if="showButton">good</button> </div> <script> new Vue({ el:"#app", data:{ showButton: true }, methods:{ deleteButton: function(){ alert("버튼을 삭제합니다."); this.showButton = !this.showButton; } } }) </script> </body> </html> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; } .menu{ background: darkslateblue; padding : 15px; border-radius: 5px; } .menu a{ color: white; padding: 20px; } </style>
❗ 잠깐 v-show란?
v-if처럼 태그를 안보이게 하는 디렉티브입니다.
하지만 v-if는 false일 때 HTML 코드에서 해당 태그 코드를 삭제하지만, v-show는 단순히 안보이게만 합니다.
마치 css에서 display:none 한 것과 똑같은 효과입니다.
[02] 반복 표시 : v-for
HTML 태그를 반복해서 표시하고 싶을 때 v-for를 사용합니다.
홈페이지 상단 메인 메뉴 출력, list 출력, 표 출력 시 v-for를 사용하면 코드가 확 줄어주는 효과를 볼 수 있습니다.
서식 1 - 배열 활용
<태그명 v-for="변수 in 배열"></태그명>
서식 2 - 단순 횟수
<태그명 v-for="변수 in 숫자"></태그명>
서식 3 - 인덱스까지 활용
<태그명 v-for="(변수,인덱스) in 배열"></태그명>
예제 1 - 배열 데이터를 v-for로 출력
결과
소스코드
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Vue.js sample</title> <link rel="stylesheet" href="style.css" > <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> </head> <body> <div id="app"> <h2 align="center">배열 데이터를 리스트로 표시하는 예제</h2> <li v-for="item in myArray">{{item}}</li> </div> <script> new Vue({ el:"#app", data:{ myArray: ["쨈빵", "멜론빵", "크로와상"] } }) </script> </body> </html> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; } .menu{ background: darkslateblue; padding : 15px; border-radius: 5px; } .menu a{ color: white; padding: 20px; } </style>
예제 2 - 오브젝트 데이터를 v-for로 출력
결과
소스코드
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Vue.js sample</title> <link rel="stylesheet" href="style.css" > <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> </head> <body> <div id="app"> <h2 align="center">오브젝트 데이터를 리스트로 표시하는 예제</h2> <li v-for="item in myObjects">{{item.name}} ₩{{item.price}}</li> </div> <script> new Vue({ el:"#app", data:{ myObjects: [{name:'쨈빵', price:1000}, {name:'멜론빵', price:1200}, {name:'크로와상', price:1500}] } }) </script> </body> </html> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; } .menu{ background: darkslateblue; padding : 15px; border-radius: 5px; } .menu a{ color: white; padding: 20px; } </style>
예제 3 - 구구단 5단을 v-for로 출력
결과
소스코드
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Vue.js sample</title> <link rel="stylesheet" href="style.css" > <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> </head> <body> <div id="app"> <h2 align="center">구구단 5단을 v-for로 출력</h2> <li v-for="n in 10"> 5X{{n}} = {{5*n}}</li> </div> <script> new Vue({ el:"#app", data:{ } }) </script> </body> </html> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; } .menu{ background: darkslateblue; padding : 15px; border-radius: 5px; } .menu a{ color: white; padding: 20px; } </style>
예제 4 - 번호를 붙여서 배열 데이터를 v-for로 출력
결과
소스코드
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Vue.js sample</title> <link rel="stylesheet" href="style.css" > <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> </head> <body> <div id="app"> <h2 align="center">번호를 붙여서 배열 데이터를 v-for로 출력</h2> <li v-for="(n,i) in myArray"> {{i}} : {{n}}</li> </div> <script> new Vue({ el:"#app", data:{ myArray: ["쨈빵","멜론빵","크로와상"] } }) </script> </body> </html> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; } .menu{ background: darkslateblue; padding : 15px; border-radius: 5px; } .menu a{ color: white; padding: 20px; } </style>
예제 5 - 표를 v-for로 출력
결과
소스코드
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Vue.js sample</title> <link rel="stylesheet" href="style.css" > <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> </head> <body> <div id="app"> <h2 align="center">표를 v-for로 출력</h2> <table> <th v-for="h in header"> {{h}}</th> <tr v-for="rank in ranking"> <td v-for="r in rank">{{r}}</td> </tr> </table> </div> <script> new Vue({ el:"#app", data:{ header: ["Programming Language", 2018, 2013, 2008, 2003, 1998], ranking: [ ['Java',1,2,1,1,16], ['C',2,1,2,2,1], ['C++',3,4,3,3,2], ['Python',4,7,6,11,23], ['JavaScript',7,10,8,7,20] ] } }) </script> </body> </html> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; } .menu{ background: darkslateblue; padding : 15px; border-radius: 5px; } .menu a{ color: white; padding: 20px; } table{ width:100%; text-align:left; } table td{ padding:12px; border-botton:2px solid darkgray; } table tr:nth-of-type(even){ background-color:rgba(0,0,255,0.1); } </style>
배열 데이터 추가/삭제
서식
배열.push("데이터"); //데이터 추가 배열.splice(배열위치,0,"데이터"); //특정 위치의 데이터 추가 배열.splice(배열위치, 1);// 특정 위치의 데이터 삭제 배열.splice(배열위치, 1, "데이터"); //특정 위치의 데이터 변경
예제 5 - 버튼으로 리스트에 추가/삭제
결과
소스코드
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Vue.js sample</title> <link rel="stylesheet" href="style.css" > <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> </head> <body> <div id="app"> <h2 align="center">버튼으로 리스트에 추가/삭제</h2> <li v-for="item in toDoList">{{item}}</li> <button @click="addLastly()">맨 뒤에 추가</button><br> <button @click="addObj(3)">네번 째에 추가</button><br> <button @click="motifyObj(0)">첫번째 값 변경</button> </div> <script> new Vue({ el:"#app", data:{ toDo:'', number: 0, toDoList: ['첫번째','두번째','세번째','네번째','다섯번째'] }, methods:{ addLastly:function(){ this.toDoList.push('[맨 뒤에 추가]'); }, addObj:function(n){ this.toDoList.splice(n,0,'[추가]'); }, motifyObj:function(n){ this.toDoList.splice(n,1,'[변경]'); } } }) </script> </body> </html> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; } .menu{ background: darkslateblue; padding : 15px; border-radius: 5px; } .menu a{ color: white; padding: 20px; } table{ width:100%; text-align:left; } table td{ padding:12px; border-botton:2px solid darkgray; } table tr:nth-of-type(even){ background-color:rgba(0,0,255,0.1); } button{ float:center; } </style>
예제 6 - 버튼 클릭하면 정렬
결과
소스코드
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Vue.js sample</title> <link rel="stylesheet" href="style.css" > <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> </head> <body> <div id="app"> <h2 align="center">버튼 클릭하면 정렬</h2> <li v-for="item in myArray">{{item}}</li> <button v-on:click="sortArray(myArray)">클릭</button> </div> <script> new Vue({ el:"#app", data:{ myArray: ['one', 'two', 'three', 'four', 'five'] }, methods:{ sortArray:function(arr){ arr.sort(function(a,b){ return (a<b ? -1 : 1); }); } } }) </script> </body> </html> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; } .menu{ background: darkslateblue; padding : 15px; border-radius: 5px; } .menu a{ color: white; padding: 20px; } table{ width:100%; text-align:left; } table td{ padding:12px; border-botton:2px solid darkgray; } table tr:nth-of-type(even){ background-color:rgba(0,0,255,0.1); } button{ float:center; } </style>
JS에서 sort 함수
- 오름차순 정렬
배열이름.sort(function(a,b){return a<b?-1:1});
- 내림차순 정렬
배열이름.sort(function(a,b){return a>b?-1:1});
예제 7 - 짝수만 표시
결과
소스코드
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Vue.js sample</title> <link rel="stylesheet" href="style.css" > <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> </head> <body> <div id="app"> <h2 align="center">짝수만 표시</h2> <li v-for="item in myArray" v-if="item%2==0">{{item}}</li> </div> <script> new Vue({ el:"#app", data:{ myArray: [1,2,3,4,5,6,7,8,9,10] }, methods:{ sortArray:function(arr){ arr.sort(function(a,b){ return (a<b ? -1 : 1); }); } } }) </script> </body> </html> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; } .menu{ background: darkslateblue; padding : 15px; border-radius: 5px; } .menu a{ color: white; padding: 20px; } table{ width:100%; text-align:left; } table td{ padding:12px; border-botton:2px solid darkgray; } table tr:nth-of-type(even){ background-color:rgba(0,0,255,0.1); } button{ float:center; } </style>
예제 8 - 버튼을 클릭하면 짝수만 표시
결과
소스코드
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Vue.js sample</title> <link rel="stylesheet" href="style.css" > <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> </head> <body> <div id="app"> <h2 align="center">버튼을 클릭하면 짝수만 표시</h2> <li v-for="item in myArray">{{item}}</li> <button v-on:click="showEvenNum">짝수만 표기</button> </div> <script> new Vue({ el:"#app", data:{ myArray: [1,2,3,4,5,6,7,8,9,10] }, methods:{ showEvenNum:function(){ this.myArray = this.myArray.filter(function(value){ return value%2==0; }); } } }) </script> </body> </html> <style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; } .menu{ background: darkslateblue; padding : 15px; border-radius: 5px; } .menu a{ color: white; padding: 20px; } table{ width:100%; text-align:left; } table td{ padding:12px; border-botton:2px solid darkgray; } table tr:nth-of-type(even){ background-color:rgba(0,0,255,0.1); } button{ float:center; } </style>
Author And Source
이 문제에 관하여([백견불여일타/Vue.js] 6장 - 조건문 & 반복문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@se_bb/백견불여일타Vue.js-6장-조건문-반복문저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)