반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바스크립트
- CSS
- v-html
- State
- 댓글달기
- MySQL
- webpack
- 쉬운설명
- App.vue
- 리액트
- JavaScript
- Vue transition
- express
- input
- ES6
- sass
- HOC
- react
- 자료구조
- Wecode
- storybook
- nodejs
- vuex
- Vue
- event
- jsx
- Vue.js
- mapGetters
- TypeScript
- scss
Archives
- Today
- Total
익명의 개발노트
[typescript] Vue 클래스 기반 컴포넌트 만드는 법, Prop 전달하는 방법 본문
반응형
1. 클래스 기반 컴포넌트 (Class base Component)
vue-typescript 클래스구성을 보니 리액트와 비슷해져가는 듯한 느낌을 받았다.
기본적으로 뷰 컴포넌트에서 template, script, style 부분에서 script에 반드시 lang="ts"를 명시해주어야 한다.
그리고 리액트 처럼, import { Component, Vue } from 'vue-property-decorator' 를 import 해주고,
@Component라는 데코레이터를 사용한다.(데코레이션은 애노테이션 개념보다는 함수로 보면 된다.)
그 후에는 클래스 이름 명시와 Vue를 상속 받는다.
<template>
<div>
<input type="text" v-model="message">
<div>{{message}}</div>
</div>
</template>
<script lang="ts"> //1. ts명시
import {Component, Vue} from 'vue-property-decorator'; //2. import
@Component //3. Component 데코레이터 명시
export default class Message extends Vue { //4. 클래스 이름과 뷰 상속받기
message: string = '메세지를 입력해주세요';
}
</script>
<style>
</style>
2. Prop 전달하기
Prop는 import 한 부분에서 Prop을 추가해주고 데코레이터를 클래스 안에다가 명시해준다.(아래참고)
//자식컴포넌트
<template>
<div>
{{parentMessage}}
</div>
</template>
<script lang="ts">
import {Component, Prop, Vue} from 'vue-property-decorator';
@Component
export default class Children extends Vue {
@Prop() parentMessage?: string;
}
</script>
<style>
</style>
부모에서 자식에게 Prop을 넘길때, 동적, 정적으로 전달이 가능하다.
//부모컴포넌트
<template>
<div class="home">
<img alt="Vue logo" src="../assets/logo.png">
<message></message>
<children :parentMessage="message"></children>
</div>
</template>
<script lang="ts">
// @ is an alias to /src
import {Component, Vue} from 'vue-property-decorator';
import message from '@/components/message.vue';
import children from '@/components/children.vue';
@Component({
components: {
message,
children,
},
})
export default class Home extends Vue {
message: string = 'hello world';
}
</script>
반응형
'코딩일기 > TIL' 카테고리의 다른 글
[typescript] !, ? (0) | 2020.01.09 |
---|---|
[typescript] vuex (0) | 2020.01.05 |
[vue.js] high-order-component과 Mixin (0) | 2019.12.26 |
[vue.js] 공통부분 컴포넌트 처리 & Slot & slot-scope (0) | 2019.12.24 |
[vue.js] 동적 라우팅 & v-html & 트랜지션 (0) | 2019.12.23 |
Comments