[Vue.js] Emit
Emit使用コード
Emit特性
$emit – 자식이 부모 컴퍼넌트로 이벤트를 전달 메서드
親子の関係でなければなりません.データは渡されますが、イベント関数には変更が必要なデータが付いていて、親に変更させます.すなわち、データバインディングではなく、요청
である.使用理由
子供が親のデータを直接変更すると、データ構造が悪化し、データの一貫性が崩壊するためです.
자손.vue
<template>
<div class="home">
<h1>손자</h1>
{{ mySchoolProp }}
{{ myAgeProp }}
<button v-on:click = "moveSchool">나 전학갈래!</button>
</div>
</template>
<script>
export default {
name: "HomeGrandChild",
props: ["mySchoolProp","myAgeProp"],
methods: {
moveSchool(){
// emit("부모가 받을 요청명", "요청 1" , "요청 2" ...)
this.$emit("moveSchool", "명문초등학교");
}
}
}
</script>
<style scoped>
</style>
emit("부모가 받을 요청명", "요청 1" , "요청 2" ...)
부모.vue
<template>
<div class="home">
<h1>자식</h1>
{{ mySchoolProp }}
{{ myAgeProp }}
<HomeGrandChild
v-bind:mySchoolProp="mySchoolProp"
v-bind:myAgeProp="myAgeProp"
v-on:moveSchool="moveSchool"
/>
<!-- 자식의 $emit메서드는 v-on으로 받는다,
v-on : 자식 메서드 명 = "부모메서드" -->
</div>
</template>
<script>
import HomeGrandChild from "../components/HomeGrandChild.vue";
export default {
name: "HomeChild",
components: {
HomeGrandChild,
},
// 부모에서 보내오는 상태 받기!
// 여러 상태를 받아올 수 있기에 배열형태
props: ["mySchoolProp","myAgeProp"],
created() {
// props로 받아오지 않았다면 undefined
console.log(this.mySchool);
},
methods: {
// 해당 함수의 파라미터를 가져오는것이기 때문에 this를 따로 작성해주면 안된다.
moveSchool(schoolName) {
// 최상단으로 올려보내기 위해 다시 emit 사용, 중계역할
this.$emit("moveSchool",schoolName)
},
},
};
</script>
<style scoped></style>
V-on: 자식 이벤트 = “부모메서드“
최상단.vue
<template>
<div class="home">
<h1>할아버지</h1>
<!-- 자식에 상태(State)를 '단방향'으로 전송 -->
<!-- v-bind: 보낼 상태명 = "상태" -->
<HomeChild
v-bind:mySchoolProp="mySchool"
v-bind:myHeightProp="myAge"
v-on:moveSchool="moveSchool"
/>
</div>
</template>
<script>
import HomeChild from "../components/HomeChild.vue";
export default {
name: "Home",
components: {
HomeChild,
},
data() {
return {
myAge: "12",
mySchool: "현재초등학교",
myInfo: {},
};
},
created() {
console.log(`내 나이: ${this.myAge}`);
console.log(`내 학교: ${this.myHeight}`);
},
methods: {
gettingOld() {
this.myAge = 80;
},
// 손자의 요청을 통해 데이터 변경
moveSchool(schoolName) {
this.myage = schoolName;
},
},
};
</script>
<style scoped></style>
孫がデータを変更したい場合は、要求を両親に送った後、両親が変更しなければならない.손자 -> 최상단 으로 요청을 올려보냄
-> Emit
整理する孫:ステータス変更のリクエスト->親:ロールの中継、最上位へのリクエスト->最上位:実際のステータスの変更
Reference
この問題について([Vue.js] Emit), 我々は、より多くの情報をここで見つけました https://velog.io/@dev-hoon/Vue.js-Emitテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol