Do it! Vue.js 입문 도서를 읽고 중요한 부분만 정리합니다!
구매링크: http://www.yes24.com/Product/Goods/58206961
참고링크1: http://wiki.x2bee.com/pages/viewpage.action?pageId=8553372
참고링크2: http://wiki.x2bee.com/pages/viewpage.action?pageId=8553499
뷰로 화면을 개발하기 위해 필수적으로 생성해야 하는 기본 단위
new Vue({
//내용 작성
})
new Vue()
로 인스턴스를 생성할 때 Vue를 생성자라고 한다.
객체를 새로 생성할 때 자주 사용하는 옵션과 기능들을 미리 특정 객체에 저장해두는 것!
뷰로 개발할 때 필요한 기능을 생성자에 미리 정의해놓고 사용자가 그 기능을 재정의하여 편리하게 사용하기 위하여 생성자를 사용한다.
인스턴스를 생성할 때 재정의할 속성을 의미한다.
el 속성의 경우 뷰 인스턴스로 화면을 렌더링할 때 화면이 그려질 위치의 돔 요소를 지정해주는 속성이다.
new Vue({
el: '#app', //el 속성
data: { //data 속성
message: 'Hello Vue.js!'
}
})
template: 화면에 표시할 HTML, CSS 등의 마크업 요소를 정의하는 속성
methods: 화면 로직 제어와 관계된 메서드를 정의하는 속성
created: 뷰 인스턴스가 생성되자마자 실행할 로직 정의하는 속성
인스턴스 상태에 따라 호출할 수 있는 속성들
조합하여 화면을 구성할 수 있는 블록
컴포넌트를 활용하면 화면을 빠르게 구조화하여 일괄적인 패턴으로 개발할 수 있다. 컴포넌트의 관계는 자료구조의 트리와 같다.
여러 인스턴스에서 공통으로 사용한다.
Vue.component('컴포넌트 이름', {
//**컴포넌트 내용**
});
특정 인스턴스에서만 유효한 범위를 가진다.
new Vue({
components: {
'컴포넌트 이름': //**컴포넌트 내용**
}
})
전역 컴포넌트는 한 번 등록하면 어느 인스턴스에서든지 사용할 수 있다.
지역 컴포넌트는 새 인스턴스를 생성할 때마다 등록해야한다.
=> 인스턴스의 유효 범위가 작성된 지역 컴포넌트는 첫 번째 인스턴스 영역에서만 제한되었기 때문이다. <my-local-component>
태그는 HTML 사용자 정의태그로 인식한다.
지역전역컴포넌트_예제1.html
지역전역컴포넌트_예제2.html
뷰의 경우 컴포넌트로 화면을 구성하므로 같은 웹 페이지라도 데이터를 공유할 수 없다. 컴포넌트마다 자체적인 고유 범위를 갖기 때문이다.
props를 통해 값을 전달한다.
Vue.component('child-component',{
props: ['props 속성 이름'];
});
<child-component v-bind:props 속성이름="상위 컴포넌트의 data 속성"></child-component>
컴포넌트를 등록함과 동시에 뷰 인스턴스 자체가 상위 컴포넌트가 된다.
인스턴스에 새로운 컴포넌트 등록시 기존에 있는 컴포넌트는 상위 컴포넌트가 되고 새로 등록된 컴포넌트는 자식 컴포넌트가 된다. 이렇게 새 컴포넌트를 등록한 인스턴스를 최상위 컴포넌트라고 한다.
이벤트를 발생시켜 상위 컴포넌트로 신호를 보낸다.
this.$emit('이벤트명');
<child-component v-on:이벤트명="상위 컴포넌트의 메서드명"></child-component>
이벤트 버스는 지정한 2개의 컴포넌트 간의 데이터를 주고받을 수 있는 방법이다.
이벤트 버스를 구현하려면 애플리케이션 로직을 담는 인스턴스와는 별개로 새로운 인스턴스를 1개 더 생성하고, 새 인스턴스를 이용하여 이벤트를 보내고 받는다.
단점: 컴포넌트가 많아질 경우 어디서 보냈는지 관리가 되지 않아 Vuex라는 상태 관리 도구가 필요하다.
//이벤트 버스를 위한 추가 인스턴스 1개 생성
var eventBus = new Vue();
//이벤트를 보내는 컴포넌트
methods: {
메서드명: function(){
eventBus.$emit('이벤트명', 데이터);
}
}
//이벤트를 받는 컴포넌트
methods: {
created: function() {
eventBus.$on('이벤트명', function(데이터){
//내용
});
}
}