반응형
우선 HelloWorld.vue의 Template에 input=text와 button을 추가해준다.
<template>
<div class="hello">
<h1>{{ msgTitle }}</h1>
<input type="text" v-model="todoItem">
<button v-on:click="addTodo"> 문자열 추가</button>
</div>
</template>
이후 script에 이 input값을 받는 data와, 이 값을 보낼 이벤트를 만들어준다.
여기서 포인트는 this$emit('이벤트명', 보낼 데이터) 이렇게 쓰인 것이다.
<script>
export default {
name: 'HelloWorld',
props: ['msgTitle'],
data() {
return {
todoItem:''
}
},
methods: {
addTodo(){
if (this.todoItem !== ''){
console.log(this.todoItem);
this.$emit('addItemEvent', this.todoItem);
this.todoItem= '';
}
}
},
}
</script>
이후 받는쪽(App.vue)로 가서 li태그로 리스트항목들을 추가해준다.
<template>
<div id="app">
<img alt="Vue logo" src="./assets/logo.png">
<HelloWorld :msg-title="message" @addItemEvent="addTodoItem" />
<ul>
<li v-for="(todo,idx) in todoItems" :key="idx">
{{todo}}
</li>
</ul>
</div>
</template>
<script>
import HelloWorld from './components/HelloWorld.vue'
export default {
name: 'App',
components: {
HelloWorld
},
data() {
return {
message: '부모 컴포넌트가 보낸 메시지',
todoItems: ['첫번째문자열','두번째문자열']
}
},
methods: {
addTodoItem(todoItem) {
this.todoItems.push(todoItem);
}
},
}
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
반응형
'Dev > [Vue.js]' 카테고리의 다른 글
[Vue.js] parent <-> child간 양방향 바인딩(with custom Tag) (0) | 2022.04.26 |
---|---|
[Vue.js] Vue Axios 적용해보기 (0) | 2021.02.15 |
[Vue.js] Vuex 를 적용해보기 (0) | 2021.02.15 |
[Vue.js] Vue.js 시작하기 (Hello World) (0) | 2021.02.09 |
[vue.js] vue.js란? 개발 환경 만들기 (0) | 2021.02.08 |