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에서 해주시기 바랍니다.
| 번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|---|
| 1097 | CSS | 8년 전 | 2183 | ||
| 1096 | CSS | 8년 전 | 2100 | ||
| 1095 | CSS | 8년 전 | 3593 | ||
| 1094 | CSS | 8년 전 | 2275 | ||
| 1093 | CSS | 8년 전 | 1501 | ||
| 1092 | CSS | 8년 전 | 1791 | ||
| 1091 | CSS | 8년 전 | 1953 | ||
| 1090 | CSS | 8년 전 | 1917 | ||
| 1089 | HTML | 8년 전 | 4414 | ||
| 1088 | CSS | 8년 전 | 1473 | ||
| 1087 | CSS | 8년 전 | 1600 | ||
| 1086 | CSS | 8년 전 | 1507 | ||
| 1085 | CSS | 8년 전 | 1530 | ||
| 1084 | CSS | 8년 전 | 1246 | ||
| 1083 | CSS | 8년 전 | 1056 | ||
| 1082 | CSS | 8년 전 | 2155 | ||
| 1081 | CSS | 8년 전 | 1957 | ||
| 1080 | CSS | 8년 전 | 1918 | ||
| 1079 | CSS | 8년 전 | 1967 | ||
| 1078 | CSS | 8년 전 | 1661 | ||
| 1077 | CSS | 8년 전 | 1685 | ||
| 1076 | CSS | 8년 전 | 2024 | ||
| 1075 | CSS | 8년 전 | 1878 | ||
| 1074 | CSS | 8년 전 | 1692 | ||
| 1073 | CSS | 8년 전 | 1541 | ||
| 1072 | CSS | 8년 전 | 1625 | ||
| 1071 | CSS | 8년 전 | 2024 | ||
| 1070 | CSS | 8년 전 | 1594 | ||
| 1069 | CSS | 8년 전 | 1832 | ||
| 1068 | CSS | 8년 전 | 1636 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기