on
[vue.js] vue component 통신
[vue.js] vue component 통신
컴포넌트끼리 통신가능?
앵귤러, 백본같은 초기 자바스크립트 프레임워크의 경우, 한 화면을 한개의 뷰로 간주
vue.js는 컴포넌트로 화면을 구성하므로, 같은 웹 페이지라도 데이터 공유 가능.(컴포넌트마다 자체적으로 고유한 유효범위(scope)이 있기때문에)
Vue Component Scope // 첫 번째 컴포넌트 내용 var cmp1 = { template: '
자바스크립트 객체 방식으로 보면, cmp2Data는 my-component1의 data를 참조하고 있지만, 값을 출력할 수 없음.
이유는, 값을 직접 참조할 수 없기 때문. 이렇게 다른 컴포넌트 값을 참조할 수 없기 때문에, 데이터 전달 방식에 따라 일관된 구조로 애플리케이션 작성이 가능.
상위, 하위 컴포넌트 관계
가장 기본적인 데이터 전달 방법: 상위(부모) - 하위(자식) 컴포넌트 간의 데이터 전달
상위에서 하위는 props라는 특별한 속성을 전달.
하위에서 상위로는 기본적으로 이벤트만 전달.
상위에서 하위로 데이터 전달하기
props 속성
props: 상위에서 하위로 데이터 전달할 때 사용.
1. 하위 컴포넌트 속성 정의
Vue.component('child-component', { props: ['props 속성 이름'], });
2. HTML 코드에 등록된 child-component 컴포넌트 태그에 v-bind 속성을 추가.
v-bind 속성의 왼쪽값에 하위 컴포넌트에서 정의한 props(아래에선 propsdata)를 넣고,
오른쪽 값으로 하위 컴포넌트에 전달할 상위 컴포넌트의 data 속성(아래에선 message)을 지정.
예제
Vue Props Sample Vue.component('child-component', { props: ['propsdata'], template: '
{{ propsdata }}
', }); new Vue({ el: '#app', data: { message: 'Hello Vue! passed from Parent Component' } });코드 순서대로 봐보자!
1. new Vue()로 인스턴스를 생성
2. Vue.component()를 이용하여 하위 컴포넌트인 child-component를 등록.
3. child-component의 내용에 props 속성으로 propsdata를 정의
4. HTML에 컴포넌트 태그 추가, 태그의 v-bind 속성을 보면, v-bind: propsdata="message"라는 상위 컴포넌트의 message 속성 값인 Hello Vue! passed from Parent Component 텍스트를 하위 컴포넌트의 propsdata로 전달.
5. child-component의 template 속성에 정의된 {{ propsdata }}는 Hello Vue! passed from Parent Component가 됨.
컴포넌트의 관계?
child-component를 전역으로 등록한거 외에는 상위 컴포넌트 지정이 없었음. 어떻게 될까?
그 이유는 컴포넌트를 등록함과 동시에 뷰 인스턴스 자체가 상위 컴포넌트가 되기 때문.
하위에서 상위 컴포넌트로 이벤트 전달
이벤트 발생과 수신
from http://racoonlotty.tistory.com/269 by ccl(A) rewrite - 2021-02-19 18:27:14