728x90
반응형
싱글 파일 컴포넌트
화면의 특정 영역에 대한 HTML
, CSS
, JS
코드를 한 파일에서 관리하는 방법으로 .vue
확장자를 가진 파일을 말한다.
.vue 파일 구조
<template> <!-- HTML (뷰 컴포넌트의 표현단, 템플릿 문법) --> </template> <script> // JavaScript (뷰 컴포넌트 내용) </script> <style> /* CSS (뷰 템플릿의 스타일링) */ </style>
동작 원리
뷰 로더에 의해 HTML
, CSS
, JS
와 같은 웹 자원으로 분리되어 실행된다. 뷰 로더는 웹팩의 로더 종류중 하나로 뷰 CLI 프로젝트를 생성하면 기본적으로 설정된다.
컴포넌트 등록하기
1. src/components
에 컴포넌트 용 vue파일
생성
// AppHeader.vue <template> <header> <h1>Header</h1> </header> </template> <script> export default { } </script> <style></style>
2. App.vue
에서 컴포넌트 용 vue파일
import
및 components
속성 등록
// App.vue <template> <div> <app-header></app-header> </div> </template> <script> // 확장자까지 써주어야 VSCode에서 제공하는 파일 바로가기를 깨지지 않고 사용 가능 import AppHeader from './components/AppHeader.vue'; // import와 동일한 의미 // var AppHeader = { // template: '<header><h1>Header</h1></header>' // } export default { components: { 'app-header': AppHeader } } </script> <style></style>
동작 확인

Props 속성 사용하기
1. props
통신 할 data
속성 추가 및 v-bind
지정
// App.vue <template> <div> <!-- <app-header v-bind:하위 컴포넌트에서 정의한 프롭스 속성 이름="상위 컴포넌트의 데이터 이름"></app-header> --> <app-header v-bind:propsdata="str"></app-header> </div> </template> <script> import AppHeader from './components/AppHeader.vue'; // 확장자까지 써주어야 VSCode에서 제공하는 파일 바로가기를 깨지지 않고 사용 가능 export default { // data 속성 추가 data: function() { return { str: 'Header' } }, components: { 'app-header': AppHeader } } </script> <style></style>
2. 컴포넌트 용 vue파일
에 props
속성 추가
// AppHeader.vue <template> <header> <h1>{{ propsdata }}</h1> </header> </template> <script> export default { props: ['propsdata'] } </script> <style></style>
동작 확인

Event emit 구현하기
1. 컴포넌트 용 vue파일
에 버튼 및 버튼 클릭 이벤트 함수 추가
// AppHeader.vue <template> <header> <h1>{{ propsdata }}</h1> <!-- 클릭 이벤트 지정 --> <button v-on:click="sendEvent">send</button> </header> </template> <script> export default { props: ['propsdata'], methods: { sendEvent: function() { // 상위 컴포넌트로 전달 this.$emit('renew'); } } } </script> <style></style>
2. Event 통신 할 methods
속성 추가 및 v-on
지정
// App.vue <template> <div> <!-- <app-header v-on:하위 컴포넌트에서 정의한 이벤트 속성 이름="상위 컴포넌트의 함수 이름"></app-header> --> <app-header v-bind:propsdata="str" v-on:renew="renewStr"></app-header> </div> </template> <script> import AppHeader from './components/AppHeader.vue'; export default { data: function() { return { str: 'Header' } }, components: { 'app-header': AppHeader }, methods: { renewStr: function() { this.str = 'Hi'; } } } </script> <style></style>
동작 확인

하위 컴포넌트에서 이벤트를 받아 상위 컴포넌트에서 정의한 renewStr
함수가 실행되어 하위 컴포넌트로 전달할 data
속성의 str
값이 변경되어 화면에 표시된다.
728x90
반응형
'Dev > Vue.js' 카테고리의 다른 글
[Vue.js] Todo App 개선하기 (0) | 2020.09.10 |
---|---|
[Vue.js] Todo App 만들기 (0) | 2020.09.10 |
[Vue.js] Vue CLI (0) | 2020.09.09 |
[Vue.js] 템플릿 문법 - 실전 (0) | 2020.09.08 |
[Vue.js] 템플릿 문법 - 기본 (0) | 2020.09.08 |
댓글