Vue.js
Vue.js 컴포넌트
jmeen
2021. 9. 14. 20:43
728x90
0. 먼저 vue.js cdn을 header에 등록한다.
<!-- 개발버전, 도움되는 콘솔 경고를 포함. -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
이해하기 쉽게 몇개로만 나누어 보자.
1. 컴포넌트 등록
1-1. 전역 컴포넌트
<body>
<!-- 1. 컴포넌트 등록 -->
<div id="app">
<!-- 3- 전역변수 "gobal-component" 사용 -->
<gobal-component></gobal-component>
</div>
<script>
// 1- 전역변수 "gobal-component" 생성
Vue.component("gobal-component", {
template: '<h1>글로벌 컴포넌트입니다.</h1>'
})
// 2- 새 인스턴스 생성
let app = new Vue({ el: '#app' })
</script>
</body>
이렇게 Vue.component
로 등록한 전역변수는 app 인스턴스에서 component를 등록하지 않아도, 바로 #app
에서 사용이 가능하다.
1-2. 지역 컴포넌트
<body>
<!-- 컴포넌트 등록 -->
<div id="app">
<!-- 1-전역변수 "gobal-component" 사용 -->
<gobal-component></gobal-component>
<!-- 2_지역번수 "local-Component" 사용 -->
<local-component></local-component>
</div>
<script>
// 1-1_전역변수 "gobal-component" 생성
Vue.component("gobal-component", {
template: '<h1>글로벌 컴포넌트입니다.</h1>'
})
// 2-1_지역변수 "local-component" 생성
let localComponent = {
template: '<h2>로컬 컴포넌트입니다.</h2>'
}
// 1-2_새 인스턴스 생성
let app = new Vue({
el: '#app',
components: {
// 2-2_지역변수를 인스턴스 내부 components옵션에 할당
"local-component": localComponent,
}
})
</script>
</body>
이렇게 적으면 지역 컴포넌트. 직접 인스턴스 옵션으로 등록을 해줘야 사용할 수 있다.
주의!! 컴포넌트 이름의 규칙이 있다. 자기들 말로는 적용하지 않는다는데, 어기면 실행이 안된다.
반드시 컴포넌트 이름은 소문자여야 하고, 하이픈으로 구분해야 한다.
2. 데이터
data는 반드시 함수여야 한다.
<body>
<div id="app">
<data-component></data-component>
</div>
<script>
Vue.component("data-component", {
template: ' <p>{{message}}</p>',
data: function () {
return {
message: "이것은 Data 예제입니다."
}
}
})
let app = new Vue({
el: '#app',
components: {
"local-component": localComponent,
}
})
</script>
</body>
3. 데이터 전달하기. Props
부모가 가진 데이터를 자식 컴포넌트로 전달 할 수 있다.
<body>
<div id="propex">
<child-component v-bind:propsdata="message"></child-component>
</div>
<script>
// 자식객체 생성
let childcmp = {
props: ['propsdata'],
template: "<h1>전달받은 메세지는 {{propsdata}} 입니다.</h1>"
}
// 부모객체 생성
let propEx = new Vue({
el: '#propex',
data: function () {
return {
message: "이 구문은 자식에게 주는 문장입니다."
}
},
components: {
"child-component": childcmp
}
})
</script>
</body>
* v-model : 양방향 데이터 전송 : 주로 set/get에 사용
* v-bind : 단방향 데이터 전송
주의해야 할 점:
- 부모 객체에는 template이 있으면 안된다.
- 자식객체가 먼저 정의되어야 한다. 위부터 순차적으로 읽어 내려온다.
4. 이벤트 연결 v-on
클릭같은 뭔가의 이벤트를 연결할때 사용한다.
<body>
<div div id="propex">
<child-component v-bind:propsdata="message"></child-component>
<button v-on:click="clickevent">클릭이벤트</button>
</div>
<script>
// 자식객체 생성
var childcmp = {
props: ['propsdata'],
template: "<h1>전달받은 메세지는 {{propsdata}} 입니다.</h1>"
}
// 부모객체 생성
var propEx = new Vue({
el: '#propex',
data: function () {
return {
message: "이 구문은 자식에게 주는 문장입니다."
}
},
components: {
"child-component": childcmp
},
methods:{
clickevent:function(){
console.log("event!")
}
}
})
</script>
부모 컴포넌트에 methods 아래 함수를 입력해 두고, 발생시 그부분을 호출한다.