일단 컴포넌트를 만든다. 이 컴포넌트는 src > components 디렉토리에 만든다.
// src/components/PageTitle.vue
<template>
<div class="page-title">
{{title}}
</div>
</template>
<script>
export default {
**props**: { // 이 컴포넌트가 부모 컴포넌트로부터 받은 props
title: {
**type**: String, **// 다른 타입의 데이터가 들어오면 warning 띄워 줌**
**default**: '페이지 타이틀입니다.' **// 만약 부모 컴포넌트에서 props를 안 내려줬을 때 디폴트값**
}
}
}
</script>
<style scoped>
.page-title {
font-size: 24px;
color: navy;
padding-bottom: 5px;
border-bottom: 5px solid navy;
}
</style>
컴포넌트 안의 script > components에 컴포넌트를 등록해서 사용할 수 있다.
<template>
<div>
**<PageTitle title="Basic Page Title" />** <!--바인딩되지 않았으므로 정적인 데이터-->
</div>
</template>
<script>
import **PageTitle** from '../components/PageTitle.vue'
export default {
name: 'BasicView',
**components: { PageTitle },**
data() {
return {
sampleData: '',
}
},
setup() {},
created() {},
mounted() {},
unmounted() {},
methods: {},
}
</script>
<style scoped></style>
v-bind를 사용해서 동적으로 props를 줄 수 있다.
<template>
<div>
<ChildComponent **:likes="likeNum"**/> <!--동적으로 바인딩!-->
<button **@click="likeNum++"**>like upup</button>
</div>
</template>
<script>
import PageTitle from '../components/PageTitle.vue'
import ChildComponent from './ChildComponentView.vue'
export default {
name: 'BasicView',
components: { PageTitle, ChildComponent },
data() {
return {
sampleData: '',
likeNum: 0,
}
},
setup() {},
created() {},
mounted() {},
unmounted() {},
methods: {},
}
</script>
<style scoped></style>
ref를 사용해서 직접 부모 컴포넌트에서 자식 컴포넌트의 이벤트를 발생시킬 수 있다.
자식 컴포넌트에서 ref로 method를 발생시킬 요소를 특정한 다음, v-on으로 해당 메서드를 바인딩한다.
// ChildComponent
<template>
<div>
<button type="button" **@click="childFunc"** **ref="child_btn"**>
Child Click
</button>
</div>
</template>
<script>
export default {
name: 'ChildComponent',
data() {
return {}
},
methods: {
childFunc() {
alert('부모 컴포넌트가 호출한 자식 컴포넌트 메서드')
},
},
}
</script>
그 후 부모 컴포넌트에서 버튼을 새로 만든다. 이 버튼은 자식 컴포넌트의 메서드를 호출하기 위해, 해당 메서드와 바인딩되어 있는 자식 컴포넌트에 접근할 것이다.
이를 위해 자식 컴포넌트에도 ref를 붙인다.
<template>
<div>
<button type="button" @click="callChildFunc">Parent Click</button>
<ChildComponent **ref="child_component"**/> <!--자식 컴포넌트에도 ref를 붙인다.-->
</div>
</template>
<script>
import ChildComponent from './ChildComponentView.vue'
export default {
name: 'BasicView',
components: { ChildComponent },
data() {
return {
}
},
methods: {
callChildFunc() {
this.$refs.child_component.$refs.child_btn.click()
}
},
}
</script>
<style scoped></style>
부모 컴포넌트의 버튼을 click > 자식 컴포넌트 ref > 자식 컴포넌트 안에 메서드를 호출하는 버튼 ref > click() 이벤트 걸기