ํด๊ทผํ๊ณ ๊ฐ์ ๋ฃ๋ ๊ฑฐ.. ์ฝ์ง ์๋ค ํด

vue ์ด๋ฒคํธํธ๋ค๋ฌ
์ด ์ ๊น์ง ๋ง๋ค์๋ ํ์ด์ง์ ๋ฒํผ์ ๋๋ฅด๋ฉด 1์ฉ ์ฆ๊ฐํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ค๊ณ ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ onclick="" ์ด๋ผ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ HTMLํ๊ทธ์ ๋ฌ์์ง๋ง Vue์์๋ v-on:click="" ์ด๋ผ๊ณ ์ฌ์ฉํ๋ค.
์ด๋ ๋ ๊ฐ๋จํ v-on: ์ @๋ก ๋ฐ๊ฟ์ธ ์ ์์ด ๊ฒฐ๊ตญ @click ๋ง ์ฐ๋ฉด ๋๋ค.
script์ count ๋ณ์๋ฅผ ์ถ๊ฐํด์ฃผ๊ณ ,
<button @click="count++">ํ์๋งค๋ฌผ์ ๊ณ </button>
<span>์ ๊ณ ์ : {count}</span>
์ด๋ฐ์์ผ๋ก ์ ์ด์ฃผ๋ฉด ๋๋ค.
๋ค๋ฅธ ์ฌ๋ฌ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ ์๋๋ฐ,
@mouseover ํ๋ฉด ํด๋ฆญ์ด ์๋๋ผ ๋ง์ฐ์ค๋ง ๋์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํ๊ฐ๋ฅํ๊ณ
@input ํ๋ฉด ์ธํ์ ๊ฐ์ ์ ๋ ฅํ์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํ๊ฐ๋ฅํ๊ณ ๋ฑ๋ฑ์ ๊ธฐ๋ฅ๋ค์ด ์๋ค.
๊ทธ๋๊ทธ๋ ํ์ํ ๋๋ง๋ค ์ฐพ์์ ์ฌ์ฉํ๋ฉด ๋ ๋ฏ!
vue์์ ํจ์๋ง๋ค๊ธฐ
script ๋ถ๋ถ์ ์ฌ์ฉํ๊ณ ์ ํ๋ ํจ์๋ฅผ methods : { ํจ์์ด๋ฆ(){} } ์ด๋ ๊ฒ ๋ง๋ค๋ฉด ๋๋ค.
data(){
return {
count : 0,
},
}
methods : {
increase(){
this.count++
}
}
์ฒ์์ count ๋ณ์์๋ ๊ณณ์ methods ๋ฅผ ๋ง๋ค์๋ค๊ฐ increase is not function ์ค๋ฅ๊ฐ ๋ฌ๋ค...
๊ผญ ์๋ฆฌ ๊ธฐ์ต์ ์ ํด์ฃผ์.
๊ทธ๋ฆฌ๊ณ ํจ์๋ฅผ ๋ง๋ค์์ ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๋ค๊ฐ ์ฐ๊ณ ์ถ์ผ๋ฉด ๊ผญ this.๋ฐ์ดํฐ๋ช ์ด๋ ๊ฒ ์ฌ์ฉํด์ผ ํ๋ค.
์๋ฌดํผ ์ด๋ ๊ฒ ๋ง๋ ํจ์๋ฅผ tamplate์๋ค๊ฐ ๋ฃ์ด์ค๋ค.
<button @click="increase">ํ์๋งค๋ฌผ์ ๊ณ </button>
<span>์ ๊ณ ์ : {count}</span>
increase ์ด๋ ๊ฒ ๋ฃ์ด๋๋๊ณ increase() ์ด๋ ๊ฒ ๋ฃ์ด๋๋๋ค.
๋ฐ๋ณต๋ฌธ๋๋ฆฐ ๊ฐ๊ฐ์ ํญ๋ชฉ์์ ์ ๊ณ ์ ๊ณ์ฐํ๊ธฐ
<template>
...
<div v-for="(a, i) in list" :key="i">
<h4>{{ a.place }} ์๋ฃธ</h4>
<p>์ {{ a.price }}๋ง์</p>
<button @click="increase(i)">ํ์๋งค๋ฌผ์ ๊ณ </button>
<span>์ ๊ณ ์ : {{ count[i] }}</span>
</div>
</template>
<script>
export default {
name: "App",
data() {
return {
count: [0, 0, 0],
header_menu: ["Home", "Product", "My page"],
list: [
{ place: "์ญ์ผ๋", price: "60" },
{ place: "์ฒํธ๋", price: "70" },
{ place: "๋งํฌ๊ตฌ", price: "80" },
],
};
},
methods: {
increase(i) {
this.count[i] += 1;
},
},
components: {},
};
</script>
increase ํจ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ด์ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์ ๋ง๋๋ ๊ฒ๊ณผ ๊ฐ์ด ๋ง๋ค์ด์ increase(i) ๋ก ์์ฑํด์ฃผ๋ฉด ๋!
count ๋ณ์๋ ๋ฐฐ์ด์ ๋ด์ ๊ฐ๊ฐ์ ์ํ๋ฅผ ๋ด๋๋ค.
์ด๋ฏธ์ง ๋ฃ๊ธฐ
imgName: ["room0.jpg", "room1.jpg", "room2.jpg"],
์ด๋ฏธ์ง ์ด๋ฆ์ ํ๋์ ๋ณ์์ ๋ด์๋ค.
<img :src="'/assets/' + imgName[i]" :alt="imgName[i]" width="300px" />
๊ทธ๋ฆฌ๊ณ img์ ๋ฃ์ด์ฃผ์๋ค.
public ํด๋์์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋ ค๋ฉด ๊ทธ๋ฅ "/๊ฒฝ๋ก" ์ด๋ ๊ฒ ์ ๋ ฅํ๋ฉด๋๊ณ ,
src ํด๋์์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋ ค๋ฉด "./๊ฒฝ๋ก" ์ด๋ ๊ฒ ์ ๋ ฅํ๋ฉด ๋๋ค.
๋์ ์ธ UI ๋ง๋๋ ๋ฒ (v-if)
0. ์ํ๋ ํ๋ฉด ๋ง๋ค์ด๋๊ธฐ (๋๋ฌด ๋น์ฐํ..)
<div class="black-bg">
<div class="white-bg">
<h2>์์ธํ์ด์ง ์ ๋ชฉ</h2>
<p>์์ธํ์ด์ง ๋ด์ฉ</p>
</div>
</div>
1. UI์ ํ์ฌ ์ํ๋ฅผ ๋ฐ์ดํฐ๋ก ์ ์ฅํด๋
data() {
return {
modal_open: false,
},
...
2. ๋ฐ์ดํฐ์ ๋ฐ๋ผ UI๊ฐ ์ด๋ป๊ฒ ๋ณด์ผ์ง ์์ฑ
<div class="black-bg" v-if="modal_open"> //modal_open์ด true์ผ๋ ์ด๋ฆผ
<div class="white-bg">
<h2>์์ธํ์ด์ง ์ ๋ชฉ</h2>
<p>์์ธํ์ด์ง ๋ด์ฉ</p>
<button @click="modal_open = false">๋ซ๊ธฐ</button> // ๋ซ๊ธฐ๋ฒํผ์ ๋๋ฅด๋ฉด false๋ก ๋ฐ๊ฟ
</div>
</div>
<div class="menu">
<a v-for="(a, i) in header_menu" :key="i">{{ a }}</a>
</div>
<div v-for="(a, i) in list" :key="i" style="margin-top: 30px">
<img :src="'/assets/' + imgName[i]" :alt="imgName[i]" width="300px" />
<h4
@click="modal_open = true" // modal_open์ true๋ก ๋ณ๊ฒฝ
@mouseover="mouseOver(i)"
@mouseleave="mouseLeave(i)"
:style="{ color: textColor[i], cursor: 'pointer' }"
>
{{ a.place }} ์๋ฃธ
</h4>
import / export
import ๋ script ์์์ ํ๋ค๋ ๊ฒ๋ง ์์๋๋ฉด ๋ฆฌ์กํธ๋ ๋๊ฐ์ด ๋ถ๋ฌ์จ๋ค.
๊ทธ๋ฆฌ๊ณ data ๋ด์ ๋ถ๋ฌ์จ ๋ฐ์ดํฐ ๋ณ์๋ฅผ ์ง์ ํด์ฃผ๊ณ , ์ฌ์ฉํ๋ฉด ๋๋ค.
<div v-for="(a, i) in onerooms" :key="i" style="margin-top: 50px">
<h2>{{ onerooms[i].title }}</h2>
<img :src="onerooms[i].image" alt="์ด๋ฏธ์ง" width="500px" />
<h4
@click="modal_open = true"
@mouseover="mouseOver(i)"
@mouseleave="mouseLeave(i)"
:style="{ color: textColor[i], cursor: 'pointer' }"
>
{{ onerooms[i].content }}
</h4>
<p>์ {{ onerooms[i].price }}์</p>
</div>
v-else
v-if์ ๊ฐ์ด ์จ์,
if๋ฌธ์ ์กฐ๊ฑด์ด์๋๋ผ๋ฉด ~์ด๊ฒ์ ๋ณด์ฌ์ฃผ์ธ์ ํ ๋ ์ฌ์ฉํ๋ค.
์๋ฅผ ๋ค์ด,
<template>
<div>
<div v-if="isLoggedIn">
<!-- ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ๊ฒฝ์ฐ -->
<p>์๋
ํ์ธ์! ํ์ํฉ๋๋ค.</p>
</div>
<div v-else>
<!-- ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ์ง ์์ ๊ฒฝ์ฐ -->
<p>๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค. ๋ก๊ทธ์ธํด์ฃผ์ธ์.</p>
</div>
</div>
</template>
<script>
export default {
data() {
return {
isLoggedIn: false,
};
},
// ๋๋จธ์ง ์ฝ๋...
};
</script>
์ด๋ ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
'TIL > Vue.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Vue.js] ๊ธฐ์ด 1 (์ค์น ๋ฐ ์คํ/๋ฐ์ดํฐ๋ฐ์ธ๋ฉ/๋ฐ๋ณต๋ฌธ) (0) | 2023.12.20 |
---|