vue.js v-for와 컴포넌트
v-for와 컴포넌트
v-for를 사용자 정의 컴포넌트에 직접 사용할 수 있습니다.
<my-compent v-for="item in items" :key="item.id"></my-compent>
2.2.0이상에서 v-for는 key가 필수 입니다.
그러나 컴포넌트에는 자체 범위가 분리되어 있기 때문에 컴포넌트에 데이터를 자동으로
전달하지는 않습니다.
반복할 데이터를 컴포넌트로 전달하려면 props도 사용해야 합니다.
<my-compoent
v-for="(item, index) in items"
v-bind:item="item"
v-bind:index="index"
v-bind:key="item.id"
></my-compent>
컴포넌트에 item을 자동으로 주입하지 않는 이유는 컴포넌트가 v-for의 작동방식과 밀접하게
결합되기 때문입니다. 데이터의 출처가 명확히 하면 다른 상황에서 컴포넌트를 재사용할 수 있습니다.
간단한 할일 목록 전체 예제입니다.
HTML부분
<div id="todo-list-example">
<input
v-model="newTodoText"
v-on:keyup.enter="addNewTodo"
placeholder="Add a todo"
>
<ul>
<li
v-for="(todo, index) in todos"
v-bind:key="todo.id"
v-bind:title="todo.title"
v-on:remove="todos.splice(index,1)"
></li>
</ul>
</div>
is="todo-item" 속성을 보면 <li>엘리먼트는 <ul>안에서만 유효합니다.
<todo-item>과 같은 일을 하지만 잠재적인 브라우저의 구문분석 오류를 해결합니다.
JS부분
Vue.component('todo-item', {
template: '\
<li>\
{{ title }}\
<button v-on:click="$emit(\'remove\')">X</button>\
</li>\
',
props: ['title']
})
new Vue({
el: '#todo-list-example',
data:{
Vue.component('todo-item', {
template: '\
<li>\
{{ title }}\
<button v-on:click="$emit(\'remove\')">X</button>\
</li>\
',
props: ['title']
})
new Vue({
el: '#todo-list-example',
data: {
newTodoText: '',
todos: [
{
id: 1,
title: 'Do the dishes',
},
{
id: 2,
title: 'Take out the trash',
},
{
id: 3,
title: 'Mow the lawn'
}
],
nextTodoId: 4
},
methods:{
addNewTodo: function(){
this.todos.push({
id: this.nextTodo++,
title: this.newTodoText
})
this.newTodoText = ''
}
}
})
게시판 목록
퍼블리셔팁
질문은 상단의 QA에서 해주시기 바랍니다.
| 번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|---|
| 1217 | 반응형 | 4년 전 | 3111 | ||
| 1216 | 웹접근성 | 4년 전 | 2507 | ||
| 1215 | CSS | 4년 전 | 4912 | ||
| 1214 | 기타 | 4년 전 | 8367 | ||
| 1213 | CSS | 4년 전 | 3259 | ||
| 1212 | 웹접근성 | 5년 전 | 3646 | ||
| 1211 | CSS |
|
5년 전 | 4131 | |
| 1210 | 기타 | 5년 전 | 3349 | ||
| 1209 | CSS | 5년 전 | 3597 | ||
| 1208 | 기타 | 5년 전 | 3158 | ||
| 1207 | 기타 | 5년 전 | 2897 | ||
| 1206 | CSS |
moviepd
|
5년 전 | 3726 | |
| 1205 | HTML |
moviepd
|
5년 전 | 4390 | |
| 1204 | 기타 | 6년 전 | 7842 | ||
| 1203 | 웹접근성 | 6년 전 | 3020 | ||
| 1202 | 기타 | 6년 전 | 2993 | ||
| 1201 | 기타 | 6년 전 | 4334 | ||
| 1200 | 기타 | 6년 전 | 4130 | ||
| 1199 | 기타 | 6년 전 | 4141 | ||
| 1198 | 기타 | 6년 전 | 2619 | ||
| 1197 | 기타 | 6년 전 | 2692 | ||
| 1196 | 기타 | 6년 전 | 2475 | ||
| 1195 | 기타 | 6년 전 | 2463 | ||
| 1194 | 기타 | 6년 전 | 3054 | ||
| 1193 | 기타 | 6년 전 | 9243 | ||
| 1192 | 기타 | 6년 전 | 3893 | ||
| 1191 | 기타 | 6년 전 | 6230 | ||
| 1190 | 기타 | 6년 전 | 2449 | ||
| 1189 | 기타 | 6년 전 | 2350 | ||
| 1188 | 기타 | 6년 전 | 1830 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기