<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
{{message}}
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
<script>
new Vue({ // Vue 객체 생성
el:'#app', // el 속성
data:{ //data 속성
message:'Hello Vue.js!'
}
})
</script>
</body>
</html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
{{message}}
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
<script>
new Vue({ // Vue 객체 생성
el:'#app', // el 속성
data:{ //data 속성
message:'Hello Vue.js!'
},
beforeCreate() {
console.log("beforeCreate");
},
mounted() {
console.log("mounted");
this.message = 'Hello vue!!!';
},
updated() {
console.log("updated");
},
})
</script>
</body>
</html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<button>컴포넌트등록</button>
<my-global-component></my-global-component> <!-- 전역컴포넌트자리 -->
<my-local-component></my-local-component> <!-- 지역컴포넌트자리 -->
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
<script>
Vue.component('my-global-component', {
template: '<div>전역 컴포넌트가 등록되었습니다. </div>'
})
var cmp = {
template: '<div>지역 컴포넌트가 등록되었습니다. </div>'
}
new Vue({
el: '#app',
components: {
'my-local-component':cmp
}
})
</script>
</body>
</html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<my-component01></my-component01>
<my-component02></my-component02>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
<script>
var cmp1 = {
template: '<div>첫번째 지역컴포넌트:{{cmp1Data}}</div>',
data: function () {
return { cmp1Data: 100 }
}
}
var cmp2 = {
template: '<div>두번째 지역컴포넌트:{{cmp2Data}}</div>',
data: function () {
return { cmp1Data:cmp1.data.cmp1Data }// 각 컴포넌트의 고유한 범위 때문에 이부분은 나타나지않는다.
}
}
new Vue({
el:'#app',
components:{
'my-component01':cmp1,
'my-component02':cmp2
}
})
</script>
</body>
</html>
컴포넌트는 각각 고유한 유효범위가 있어서 직접 다른 컴포넌트의 값을 참조 할 수 없다.
그래서 뷰 에서 정의한 데이터 전달 방법을 따라야 한다.
가장 기본 적인 데이터 전달 방법은 상위 하위 데이터 전달 방법이다.
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<child-component v-bind:propsdata="message"></child-component>
<!-- 인스턴스 객체 자체가 상위컴포넌트이다.
인스턴스에 새로운 컴포넌트를 등록하면 기존에 있는 컴포넌트가
상위컴포넌트가 되고 새로 등록된 것이 하위컴포넌트가 된다. 그러면 인스턴스가 최상위 컴포넌트가 된다. -->
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
<script>
Vue.component('child-component',{
props:['propsdata'],
template:'<p>{{propsdata}}</p>'
})
new Vue({
el:'#app',
data:{
message:'Hello vue'
}
})
</script>
</body>
</html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<!-- show-log:하위컴포넌트이벤트명, printText:상위컴포넌트메소드명 -->
<child-component v-on:show-log="printText"></child-component> <!-- //3 -->
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
<script>
Vue.component('child-component', {
template: '<button v-on:click="showLog">show</button>', //1
methods: { //2
showLog: function () {
this.$emit("show-log");
}
},
})
var app = new Vue({
el:'#app',
data:{
message:'Hello vue passed from Parent Component'
},
methods:{
printText:function(){
console.log("received an event"); //4
}
}
})
</script>
</body>
</html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<child-component></child-component>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.2/dist/vue.js"></script>
<script>
var eventBus = new Vue(); //1
Vue.component('child-component',{ //2
template:'<div>하위 컴포넌트입니다 <button v-on:click="showLog">show</button></div>',
methods: {
showLog:function(){//이벤트 명 , 데이터
eventBus.$emit('triggerEventBus',100);
}
},
})
var app = new Vue({
el:'#app',
created() {
eventBus.$on('triggerEventBus',function(val){
console.log("전달받은값: "+ val);
})
},
})
</script>
</body>
</html>