Props
- 부모 컴포넌트: 자식 컴포넌트한테 props 를 전달한다.
<template>
<div>
<h1>This is homepage</h1>
<SeizeCoder title="home title" name="Seize Coder"></SeizeCoder>
</div>
</template>
<script>
import SeizeCoder from "@/components/SeizeCoder.vue";
export default {
components: {
SeizeCoder,
},
data() {
return {
name: "Seize Coder",
};
},
methods: {},
};
</script>
<style scoped>
h1 {
color: red;
}
</style>
- 자식 컴포넌트: 부모 컴포넌트한테 props 를 전달받는다.
<template>
<div>
<h1>{{title}}</h1> <!-- title 과 name 을 props 로 받아와서 사용 -->
<p>{{ name }}</p>
<button @click="updateNmae">Change name</button>
</div>
</template>
<script lang="ts">
import Vue from "vue";
export default Vue.extend({
props: {
title: {
type: String,
required: false,
default: "default title",
},
name: {
type: String,
default: "defualt name",
},
},
data() {
return {
};
},
methods: {
updateNmae() {
this.name = "Seze Coder Updated";
},
},
});
</script>
Emit
- 자식 컴포넌트에서 부모 컴포넌트로 데이터 넘겨주기
- 자식 컴포넌트
<template>
<div>
<label for>Name</label>
<input
type="text"
:value="name"
style="padding: 30px; border: 2px solid green;"
@input="updateName"
/>
</div>
</template>
<script>
export default {
props: {
name: {
type: String,
requried: true,
},
},
methods: {
updateName(e) {
console.log(e.target.value);
this.$emit("update-name", e.target.value);
},
},
};
</script>
<template>
<div>
<h1>This is homepage</h1>
<form action>
<InputField :name="name" @update-name="updateName"></InputField>
<!--자식 컴포넌트에서 설정한 변수명을 이벤트로 불러온다 @변수명 -->
<br />
<button>Submit</button>
</form>
{{ name }}
</div>
</template>
<script>
import InputField from "@/components/InputField.vue";
export default {
components: {
InputField,
},
data() {
return {
name: "",
};
},
methods: {
updateName(name) {
this.name = name;
},
},
};
</script>
<template>
<div>
<label for>Name</label>
<input
type="text"
:value="value"
style="padding: 30px; border: 2px solid green;"
@input="$emit('input', $event.target.value)"
/>
</div>
</template>
<script>
export default {
props: {
value: {
type: String,
requried: true,
},
},
};
</script>
<template>
<div>
<h1>This is homepage</h1>
<form action>
<InputField v-model="name"></InputField>
<br />
<button>Submit</button>
</form>
{{ name }}
</div>
</template>
<script>
import InputField from "@/components/InputField.vue";
export default {
components: {
InputField,
},
data() {
return {
name: "",
};
},
};
</script>