Recent Posts
Recent Comments
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Today
Total
관리 메뉴

고리타분한 개발자

[Vue JS] Practical Component Exercise #1: Message 본문

Vue JS/Step By Step

[Vue JS] Practical Component Exercise #1: Message

sunlee334 2017. 12. 4. 21:15

기본적인 컴포넌트 사용에 대하여 알아보았으니, 이젠 컴포넌트가 어떻게 사용되는지 연습해볼 차례입니다. 우선 진행하기에 앞서 "https://bulma.io/" 사이트를 한번 둘러봐주세요. 이번시간에는 bulma라는 api를 사용하도록 하겠습니다.


<!-- index.html -->
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.6.1/css/bulma.min.css">
<style type="text/css">
body {
padding-top: 40px;
}
</style>
</head>

<body>
<div id="root" class="container">
<article class="message">
<div class="message-header">
<p>Hello World</p>
<button class="delete" aria-label="delete"></button>
</div>
<div class="message-body">
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
<strong>Pellentesque risus mi</strong>, tempus quis placerat ut, porta nec nulla. Vestibulum rhoncus ac ex sit amet fringilla.
Nullam gravida purus diam, et dictum
<a>felis venenatis</a> efficitur. Aenean ac
<em>eleifend lacus</em>, in mollis lectus. Donec sodales, arcu et sollicitudin porttitor, tortor urna tempor ligula,
id porttitor mi magna a neque. Donec dui urna, vehicula et sem eget, facilisis sodales sem.
</div>
</article>

</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.9/vue.js"></script>
<script src="main.js"></script>

</body>

</html>


위의 코드는 bulma cdn을 사용하여 "https://bulma.io/documentation/components/message/" 부분을 인용한 코드입니다.



결과값은 이렇습니다. 이제 우리는 Vue 컴포넌트를 이용하여 이 코드를 변화시켜볼 차례 입니다.


<!-- index.html -->
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.6.1/css/bulma.min.css">
<style type="text/css">
body {
padding-top: 40px;
}
</style>
</head>

<body>
<div id="root" class="container">

<message title="Hello World" body="Lorem ipsum dolar sit amet."></message>


</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.9/vue.js"></script>
<script src="main.js"></script>

</body>

</html>


// main.js
Vue.component('message', {
props: ['title', 'body'],
template: `
<article class="message">
<div class="message-header">
{{title}}
</div>
<div class="message-body">
{{body}}
</div>
</article>
`
})

new Vue({
el: '#root'
})


title과 body값을 나타내는 message라는 컴포넌트를 생성하였습니다. 이전 컴포넌트들과 달리 이 컴포넌트는 props라는 새로운 속성이 추가되었습니다. 새로운 프로퍼티인 title과 body를 사용하기 위해서는 title과 body를 컴포넌트의 props속성안에 추가시켜 주어야 합니다. 이렇게되면 <message> 엘리먼트를 사용할 때마다 title과 body의 값을 전달할 수 있습니다.


<!-- index.html -->
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.6.1/css/bulma.min.css">
<style type="text/css">
body {
padding-top: 40px;
}
</style>
</head>

<body>
<div id="root" class="container">

<message title="Hello World" body="Lorem ipsum dolar sit amet."></message>
<message title="Hello Universe" body="Blar Blar"></message>



</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.9/vue.js"></script>
<script src="main.js"></script>

</body>

</html>


// main.js
Vue.component('message', {
props: ['title', 'body'],

data() {
return {
isVisible: true
};
},
template: `
<article class="message" v-show="isVisible">
<div class="message-header">
{{title}}

<button type="button" @click="isVisible=false">x</button>
</div>
<div class="message-body">
{{body}}
</div>
</article>
`,

// methods: {
// hideModal() {
// this.isVisible = false;
// }
// }
})



new Vue({
el: '#root',

})


이번에는 코드를 좀 변경시켜 보았습니다.



위 코드는 사진과 같은 결과를 나타내어 줍니다. 


<article class="message" v-show="isVisible">


코드의 article 영역은 v-show-"isVisible" 옵션이 주어져 있습니다.


<button type="button" @click="isVisible=false">x</button>


윗 부분을 보면 버튼을 클릭하면 isVisible이 false가 되는 이벤트를 주게 되어있습니다. 그러므로 x버튼을 누르게 되면 화면에서 보이지 않게 됩니다.


Comments