오늘 배운 것
Vue Component
Basic 컴포넌트 작성
//UserName.vue
//UserName 컴포넌트를 생성한다.
//컴포넌트의 모습을 정의해준다.
<template>
//name은 컴포넌트의 data에서 가져온 정보를 받는다.
<div>이름은 {{name}}입니다.</div>
</template>
<script>
export default {
data() {
return {
name: "조수현",
};
},
};
</script>
//User.vue(UserName과 UserAdress의 부모 컴포넌트)
//위에서 작성한 UserName을 사용할 컴포넌트를 생성한다.
//컴포넌트의 모습을 정의해준다.
<template>
<div>
//컴포넌트 UserName과 UserAdress를 렌더링해주는 모습
<UserName></UserName>
<UserAdress></UserAdress>
</div>
</template>
<script>
import UserName from "./UserName"
import UserAdress from "./UserAdress"
export default {
components:{
UserName,
UserAdress
}
}
</script>
Props를 이용해 자식 컴포넌트로 데이터 전달
<template>
<div>
<UserName v-bind:name="name"></UserName>
<UserAdress :adress="adress"></UserAdress>
</div>
</template>
<script>
import UserName from "./UserName.vue";
import UserAdress from "./UserAdress.vue";
export default {
data() {
return {
name: "조수현",
adress: "울산",
};
},
components: {
UserName,
UserAdress,
},
};
</script>
<template>
<div>주소는 {{adress}}입니다.</div>
</template>
<script>
export default {
props: {
adress: String,
},
};
</script>
emit을 이용해 부모 컴포넌트로 데이터 전달
//UserAdress.vue
<template>
<div>
<div>주소는 {{adress}}입니다.</div>
//버튼 클릭시 chane 함수 실행
<button @click="change">클릭</button>
</div>
</template>
<script>
export default {
props: {
adress: String,
},
methods: {
change() {
this.$emit("handlingAdress", this.adress + "북구");
},
},
};
</script>
//User.Vue
<template>
<div>
<UserName v-bind:name="name"></UserName>
//자식 컴포넌트로부터 handlingAdress 이벤트 발생시 handlingState 함수 실행
<UserAdress :adress="adress" @handlingAdress="handlingState"></UserAdress>
</div>
</template>
<script>
import UserName from "./UserName.vue";
import UserAdress from "./UserAdress.vue";
export default {
data() {
return {
name: "조수현",
adress: "울산",
};
},
components: {
UserName,
UserAdress,
},
methods: {
handlingState(newAdress) {
this.adress = newAdress;
},
},
};
</script>
event bus를 이용해 형제 컴포넌트 사이의 데이터 전달
//main.js
//eventbus 인스턴스를 main.js에 추가
export const eventBus = new Vue()
//userAdress.vue
<template>
<div>
<div>주소는 {{adress}}입니다.</div>
<button @click="change">클릭</button>
</div>
</template>
<script>
import { eventBus } from "../main";
export default {
props: {
adress: String,
},
methods: {
change() {
this.$emit("handlingAdress", this.adress + "북구");
eventBus.$emit("adressEdited", "주소가 수정되었습니다");
},
},
};
</script>
//UserName.vue
<template>
<div>이름은 {{name}}입니다.</div>
</template>
<script>
import { eventBus } from "../main";
export default {
props: ["name"],
created() {
eventBus.$on("adressEdited", (comment) => console.log(comment));
},
};
</script>