반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- linux
- IOS
- vsCode
- Chrome
- xcode
- 센토스
- 개발
- centos
- unittest
- localserver
- qunit
- webpack
- picker
- build
- PYTHON
- MachineLearning
- ReactNative
- 맥
- androidstudio
- jest
- avds
- 리눅스
- react
- TensorFlow
- MAC
- Android
- node
- VirtualBox
- 네트워크
Archives
- Today
- Total
로메오의 블로그
[Vue.js] Event 처리 본문
반응형
VUE.JS 목록
components/layout/Header.vue
components에 layout 폴더를 만들고 header.vue 파일을 추가합니다.
<template>
<header class="header">
<h1>TodoList</h1>
</header>
</template>
<script>
export default {
name: 'Header'
}
</script>
<style scoped>
.header {
background: #333;
color: #fff;
text-align: center;
padding: 10px;
}
.header a {
color: #fff;
padding-right: 5px;
}
</style>
App.vue
<template>
<div id="app">
<Header />
<Todos v-bind:todos="todos" v-on:del-todo="deleteTodo" />
</div>
</template>
<script>
import Header from './components/layout/Header'
import Todos from './components/Todos'
export default {
name: "app",
components: {
Header,
Todos
},
data() {
return {
todos: [
{
id: 1,
title: 'Todo One',
completed: false
},{
id: 2,
title: 'Todo Two',
completed: true
},{
id: 3,
title: 'Todo Three',
completed: false
}
]
}
},
methods: {
deleteTodo(id) {
this.todos = this.todos.filter(todo => todo.id !== id)
}
}
};
</script>
<style>
</style>
AddTodo.vue
Component/AddTodo.vue 파일을 추가합니다.
<template>
<div>
<form>
<input type="text" name="title" placeholder="Add Todo...">
<input type="submit" value="Submit" class="btn">
</form>
</div>
</template>
<script>
export default {
name: 'AddTodo'
}
</script>
<style scoped>
form {
display: flex;
}
input[type="text"] {
flex: 10;
padding: 5px;
}
input[type="submit"] {
flex: 2;
}
</style>
App.vue
<template>
<div id="app">
<Header />
<AddTodo />
<Todos v-bind:todos="todos" v-on:del-todo="deleteTodo" />
</div>
</template>
<script>
import Header from './components/layout/Header'
import Todos from './components/Todos'
import AddTodo from './components/AddTodo'
export default {
name: "app",
components: {
Header,
Todos,
AddTodo
},
data() {
return {
todos: [
{
id: 1,
title: 'Todo One',
completed: false
},{
id: 2,
title: 'Todo Two',
completed: true
},{
id: 3,
title: 'Todo Three',
completed: false
}
]
}
},
methods: {
deleteTodo(id) {
this.todos = this.todos.filter(todo => todo.id !== id)
}
}
};
</script>
<style>
* {
padding:0;
margin: 0;
}
.btn {
display: inline-block;
border: none;
background: #555;
color: #fff;
padding: 7px 20px;
cursor: pointer;
}
.btn:hover {
background: #666
}
</style>
AddTodo.vue
<template>
<div>
<form @submit.prevent="addTodo">
<input type="text" name="title" placeholder="Add Todo..." v-model="title">
<input type="submit" value="Submit" class="btn">
</form>
</div>
</template>
<script>
import uuid from 'uuid'
export default {
name: 'AddTodo',
data() {
return {
title: ''
}
},
methods: {
addTodo() {
const newTodo = {
id: uuid.v4(),
title: this.title,
completed: false
}
this.$emit('add-todo', newTodo)
this.title = ''
}
}
}
</script>
....
uuid 설치하기
$ yarn add uuid
Submit 버튼을 눌르면 newTodo가 emit 됩니다.
App.vue
<template>
<div id="app">
<Header />
<AddTodo v-on:add-todo="addTodo" />
<Todos v-bind:todos="todos" v-on:del-todo="deleteTodo" />
</div>
</template>
<script>
import Header from './components/layout/Header'
import Todos from './components/Todos'
import AddTodo from './components/AddTodo'
export default {
name: "app",
components: {
Header,
Todos,
AddTodo
},
data() {
....
},
methods: {
deleteTodo(id) {
this.todos = this.todos.filter(todo => todo.id !== id)
},
addTodo(newTodo) {
this.todos = [...this.todos, newTodo]
}
}
};
</script>
....
AddTodo component에 add-todo 이벤트 리스너를 추가합니다.
methods에 addTodo를 추가합니다.
새로운 todo가 추가되었습니다.
VUE.JS 목록
반응형
'Frontend > Vue' 카테고리의 다른 글
[vue.js] 폼 유효성 검사 (0) | 2019.10.24 |
---|---|
[Vue.js] vue-router 사용하기 (0) | 2019.10.12 |
[Vue.js] http 통신하기 (0) | 2019.10.12 |
[Vue.js] Component 사용하기 (3) | 2019.10.12 |
[Vue.js] 프로젝트 설정/배포 - vue/cli & vue ui (0) | 2019.10.11 |
Comments