뷰(Vue) 컴포넌트
뷰 컴포넌트란?
화면을 구성할 수 있는 블록(특정 영역)단위를 의미하며, 컴포넌트를 활용하여 화면을 빠르게 구조화하여 일괄적 패턴으로 개발할 수 있다. 화면의 영역을 컴포넌트로 쪼개어 관리하면 나중에 유지보수가 용이하며, 남이 작성한 코드를 보다 직관적으로 이해할 수 있다.
흔히 웹의 구성화면에서 네비게이션 바, 테이블, 리스트 등과 같은 요소들을 잘게 쪼개어 컴포넌트로 관리한다.
전역 컴포넌트(여러 인스턴스에서 공통으로 사용)
<div id="app"> //인스턴스
<global-component></global-component>
</div>
<template id="template"> //템플릿
<span>전역 컴포넌트 입니다.</span>
</template>
<script>
Vue.component('global-component',{ //전역 컴포넌트
template : '#template'
})
var App = new Vue({
el : '#app'
})
</script>
우선 컴포넌트 이름은 template 속성에서 사용할 HTML 사용자 정의 태그를 의미하며, 컴포넌트 내용에는 template, data, methods 등 인스턴스 옵션 속성을 정의할 수 있다.
지역 컴포넌트(특정 인스턴스에서만 사용가능)
<div id="app">
<local-component></local-component>
</div>
<script>
var local_temp = { // 지역 컴포넌틑 템플릿
template : '<p>지역 컴포넌트 입니다</p>'
}
var App = new Vue({
el : '#app',
components : { /지역 컴포넌트
'local-component' : local_temp
}
})
</script>
지역 컴포넌트이기 떄문에 #app 인스턴스 범위에서만 접근이 가능
props를 이용한 정보전달
//props를 이용한 정보전달
<div id="app">
<component-name message="props사용!"></component-name>
<component-name message="여러개를 쓸 수 있기때문에 배열로!"></component-name>
</div>
<template id="template"> //템플릿
<p>{{message}}</p>
</template>
<script>
Vue.component('component-name',{
template : '#template' ,
props : [ 'message' ] //배열로 나열
})
var App = new Vue({
el : '#app'
})
</script>
컴포넌트들이 부조-자식 관계로형성되었을 때 각 컴포넌트 내부의 데이터는 캡슐화되기 때문에 다른 컴포넌트나 앱에서 접근할 수 없다. 부모 컴포넌트에서 자식 컴포넌트로 정보를 전달하기 위해 props을 이용해야한다. 부모에서 자식으로 단방향으로만 전달 가능
See the Pen [Vue.js] Array Data output example by junheeleeme (@junheeleeme) on CodePen.