일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 뷰
- GIT
- 포렌식워게임
- Express
- 이진탐색트리
- 써니나타스
- 그래프
- bootstrap
- 웹개발
- 이진트리
- 웹기초
- CTF
- MongoDB
- NavBar
- nodeJS
- 워게임
- 자바
- mongoose
- 자바기초
- 자바문제풀이
- 포렌식
- wargame.kr
- 웹해킹
- gitbash
- node
- 워게임추천
- 자료구조
- 웹해킹기초
- node.js
- materialize
- Today
- Total
보안 전공생의 공부
디렉티브 | v-for, v-bind, v-model 본문
◆ 디렉티브(directive) : html 엘리먼트의 특별한 속성 형태
v- 접두사 형태로 사용 !
◆ v-for
다수의 item을 포함하는 집합 형태의 list를 나타낸다.
· 형식
<html_element v-for="item in items" v-bind:key="item의 한 속성"> (일반)
<html_element v-for="item in items" :key="item의 한 속성"> (축약)
-items : 데이터 집합
-item : 데이터 집합 內 하나의 데이터
-v-bind : v-for 디렉티브를 이용해 리스트 나타낼 때 사용
key의 속성 설정 → vue가 각 item을 검색하고 정렬할 수 있도록 함
예제를 작성하기 위해 우선 프로젝트 생성 · 구동을 시킨다.
cmd창에 vue create vfor --default 를 입력해 vfor 프로젝트를 생성하였다.
그리고 cd vfor , npm run serve를 입력해 서버를 구동시켰다.
생성된 vfor 프로젝트의 src폴더 내 App.vue를 밑에처럼 작성하였다.
<template>
<div id="app">
<h1> 필요한 생활용품 </h1>
<u1>
<li v-for="item in goods" v-bind:key="item.id">{{item.name}}</li>
</u1>
</div>
</template>
<script>
export default{
name: 'app',
data(){
return{
goods : [
{id:1, name:'계란', price:5500, store:'market', amount:30},
{id:2, name:'칫솔', price:5000 ,store:'coupang', amount:5},
{id:3, name:'juice', price:3000, store:'market', amount:1},
{id:4, name:'shelf', price:300000, store:'coupang', amount:1},
{id:5, name:'thread', price:10000, store:'coupang', amount:4}
]
}
}
}
</script>
<style>
</style>
위와 같이 name이 나열되어 표시되는 것을 확인할 수 있다!
이제 모든 데이터가 나타나도록 테이블 형태로 출력할 것이다.
밑 주소는 코드를 짜는데 필요한 테이블 태그들에 대한 소개가 되어있다!
https://studyingych.tistory.com/6
<template>
<div id="app">
<h1> 필요한 생활용품 </h1>
<table>
<thead>
<tr><th>번호</th><th>물품명</th><th>가격</th>
<th>파는 곳</th><th>수량</th></tr>
</thead>
<tbody>
<tr v-for="item in goods" v-bind:key="item.id">
<td>{{item.id}}</td>
<td>{{item.name}}</td>
<td>{{item.price}}</td>
<td>{{item.store}}</td>
<td>{{item.amount}}</td>
</tr>
</tbody>
</table>
</div>
</template>
<script>
export default{
name: 'app',
data(){
return{
goods : [
{id:1, name:'계란', price:5500, store:'market', amount:30},
{id:2, name:'칫솔', price:5000 ,store:'coupang', amount:5},
{id:3, name:'juice', price:3000, store:'market', amount:1},
{id:4, name:'shelf', price:300000, store:'coupang', amount:1},
{id:5, name:'thread', price:10000, store:'coupang', amount:4}
]
}
}
}
</script>
<style>
table{
width:80%;
border-collapse:collapse;
}
tr:nth-of-type(odd){
background:#eee;
}
th{
background:#333;
color:white;
font-weight:bold;
}
td,th{
padding:6px;
border:1px solid #ccc;
text-align:left;
}
</style>
table, thead,tbody 같은 html 엘리먼트로 테이블 구조를 만들었다.
tbody 내에서 v-for 디렉티브를 이용해 각 데이터행에 속한 컬럼값을 표시하였다.
적용하면 위와 같다.
◆ v-bind
HTML 엘리먼트에 하나 or 둘 이상의 속성을 연결하는 데 사용
· 형식 : v-bind:argument (일반)
:argument (축약)
(1) 이미지 연결 : v-bind:src or :src
- <img v-bind:src="image.png"> or <img :src="image.png">
(2) 링크 연결 : v-bind:href or :href
- or
이미지와 링크 연결하기
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<div class="imgdiv" v-for="img in images" :key="img.text">
<a :href="img.url">{{img.text}}</a>
<img v-bind:src="img.src"/>
</div>
</div>
<script src="http://cdn.jsdelivr.net/npm/vue@2.6.6/dist/vue.js"></script>
<script>
new Vue({
el:'#app',
data : {
images : [
{text:'로제떡볶이', src:'./img.jpg', url:'https://www.10000recipe.com/recipe/6865767'},
{text:'순대곱창전골',src:'./unnamed.jpg',url:'https://m.blog.naver.com/jupippi/221559480524'},
{text:'청년피자 허니비', src:'./다운로드.jpeg',url:'https://m.blog.naver.com/lnk2721/221922618322'},
{text:'닭발&주먹밥',src:'./다운로드 (1).jpeg',url:'https://haemukja.com/recipes/1205'}
]
}
})
</script>
<style>
.imgdiv{margin:4px; border:4px solid yellow; display:inline-block;}
img{width:240px; height:180px; padding:3px;}
a{text-align:center: display:block;}
</style>
</body>
</html>
이미지와 링크를 연결하였다.
(3) 스타일 관련 연결 : v-bind:class, v-bind:style or :class, :style
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<h1 v-bind:class="{'applycolor':applycolor}">동적으로 class 속성 적용</h1>
<input type="checkbox" v-model="applycolor">
<span>h1 엘리먼트 색바꾸기</span>
</div>
<script src="http://cdn.jsdelivr.net/npm/vue@2.6.6/dist/vue.js"></script>
<script>
new Vue({
el:'#app',
data : {
applycolor:false
}
})
</script>
<style>
.applycolor{color:blue;}
</style>
</body>
</html>
체크박스를 클릭하면 h1의 색상이 <style>태그에서 정의한 blue로 바뀐다.
h1태그의 class 속성에 applycolor가 추가된걸 확인할 수 있다.
(4) key 연결 : v-bind:key or :key
◆ v-model
양방향 데이터 바인딩 가능하도록 해줌
- HTML from 엘리먼트와 관련된 input, checkbox, textarea, select같은 엘리먼트의 속성 형태로 사용됨
· 형식 : <input v-model="name">
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<label>이름 :</label>
<input type="text" v-model="name">
<p>{{name}}</p>
<input type="checkbox" v-model="checked">
<span>찜닭에 당면 추가 하실래요?{{checked?'예':'아니요'}}</span>
</div>
<script src="http://cdn.jsdelivr.net/npm/vue@2.6.6/dist/vue.js"></script>
<script>
new Vue({
el:'#app',
data : {
name:'',
checked:false
}
})
</script>
</body>
</html>
v-model="~~"형태로 text와 checkbox같은 엘리먼트의 속성을 사용하였다.
체크박스 클릭
checked의 값을 false로 초기화하여 웹상에 '아니요'가 출력되게 하였지만,
웹페이지에서 체크박스를 체크하면 그 값이 true로 바뀌고 웹상에 '예'가 출력된다 ⇒ 양방향 바인딩
'WEB > Vue' 카테고리의 다른 글
컴포넌트 정의 및 등록 / 컴포넌트 간의 통신 (0) | 2021.01.27 |
---|---|
디렉터리 | 이벤트 처리 : v-on (0) | 2021.01.27 |
디렉티브 | v-if, v-for : 조건 렌더링 (0) | 2021.01.18 |
프로퍼티(2) (0) | 2021.01.18 |
vue.js 설치, 프로젝트 생성 및 구동, 종료 (0) | 2021.01.18 |