1. Vue.js Project ์์ฑ
vue create todoapp
๋ฏธ๋ฆฌ Git Clone ์์ผ๋๊ณ ๊ทธ ํด๋ ์์ Vue.js ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค.
(Git Clone : GitHub Code ๋ณต์ฌ → VSCode์์ Ctrl + Shift + P → Git: Clone → GitHub Code ๋ถ์ฌ ๋ฃ๊ธฐ)
cd todoapp
npm run serve
ํ๋ก์ ํธ๋ฅผ ์คํ์์ผ๋ณด๊ณ ์คํ์ด ์ ๋๋ค๋ฉด
Defalut ํ์ผ src/component/HelloWorld.vue ํ์ผ์ ์ญ์ ํ๋ค.
src/App.vue์ HelloWorld.vue ๊ด๋ จ ๋ด์ฉ์ ๋ค ์ง์ด๋ค. (์๋ ์ฃผ์ ๋ถ๋ถ)
<!-- src/App.vue -->
<template>
<div id="app">
<!-- <img alt="Vue logo" src="./assets/logo.png"> -->
<!-- <HelloWorld msg="Welcome to Your Vue.js App"/> -->
</div>
</template>
<script>
// import HelloWorld from './components/HelloWorld.vue'
export default {
name: 'App',
components: {
// HelloWorld
}
}
</script>
2. Components ์์ฑ ๋ฐ import (TodoInput, TodoList, TodoItem)
src/components ์๋์ 3๊ฐ์ vue ํ์ผ์ ๋ง๋ค์ด์ฃผ๊ณ ,
์ผ๋จ ํ์ผ ๋ด์ฉ์ <h3>
ํ๊ทธ๋ก ํ์ผ๋ช
๋ง ์์ฑ์ ํด๋๋ค.
<!-- src/App.vue -->
<template>
<div id="app">
<TodoInput/>
<TodoList/>
</div>
</template>
<script>
import TodoInput from '@/components/TodoInput';
import TodoList from '@/components/TodoList';
export default {
name: 'App',
components: {
TodoInput,
TodoList
}
}
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
TodoInput๊ณผ TodoList ํ์ผ์ App.vue์ import ์์ผ์ฃผ๊ณ ,
<!-- src/components/TodoList.vue -->
<template>
<div>
<h3>Todo List</h3>
<TodoItem/>
<TodoItem/>
<TodoItem/>
</div>
</template>
<script>
import TodoItem from '@/components/TodoItem';
export default {
components: {
TodoItem
}
}
</script>
<style>
</style>
TodoItem์ TodoList์ import ์์ผ์ค๋ค.
์ผ๋จ ์์๋ก TodoItem์ 3๊ฐ ํ์ํด์ค ๋ดค๋ค.
์ ๋ ๊ฒ import ์ํค๊ณ ์คํ์ ํ๋ฉด ์ด๋ฐ ํ๋ฉด์ด ์ถ๋ ฅ๋ ๊ฑฐ๋ค.
3. Vuetify ์ถ๊ฐ ํ UI ์์
์ด์ ๊ฐ์ ํ์ผ๋ช ์ด ์๋ ์ญํ ์ ์ฃผ๊ธฐ๋ก ๐
๋จผ์ TodoInput.vue ํ์ผ์ <input>
๊ณผ <button>
์ ์์ฑํ๋ค.
<!-- src/components/TodoInput.vue -->
<template>
<div>
<input type="text"/>
<button>Add</button>
</div>
</template>
<!-- script, style ๊ทธ๋๋ก -->
TodoList.vue์๋ <h3>
์ ๋ชฉ ํ๊ทธ๋ฅผ ์ง์์ฃผ๊ณ <TodoItem>
๋ง ๋ด๋๋ค.
<!-- src/components/TodoList.vue -->
<template>
<div>
<TodoItem/>
<TodoItem/>
<TodoItem/>
</div>
</template>
<!-- script, style ๊ทธ๋๋ก -->
TodoItem.vue์๋ <button>
๋ ๊ฐ์ ๊ธฐํ ๋ฑ๋ฑ ์์ฑ ๐
<!-- src/components/TodoItem.vue -->
<template>
<div>
<h5>#1</h5>
<h3>Todo Title</h3>
<button>Edit</button>
<button>Delete</button>
</div>
</template>
<!-- script, style ๊ทธ๋๋ก -->
์ด๋ ๊ฒ ๋์ค๋ฉด ๋๋ค.
๊ทผ๋ฐ UI๊ฐ ๋ง์์ ์๋ค์ด์ ์ด์ ์ผ Vuetify ์ถ๊ฐ... ^^
Vuetify ์ถ๊ฐํ๋ฉด์ App.vue๊ฐ ์์ ๋ฐ๋์ด๋ฒ๋ ค์
App.vue์ import ํ๋ ๊ฑฐ ๋ค ์ฌ๋ผ์ง!
(vuetify ์ถ๊ฐํ ๊ฑฐ๋ฉด ๋ฏธ๋ฆฌ ํ๊ธฐ ๐)
ํ์ผ๋ค์ Vuetify Tag๋ก ๋ฐ๊พธ๊ณ ์ฝ๋๋ฅผ ๋ค์ ์์ ํด๋ณด๊ฒ ์ต๋๋ค ,,, ^^
<!-- src/App.vue -->
<v-main>
<TodoInput/>
<TodoList/>
</v-main>
.
.
.
<script>
import TodoInput from '@/components/TodoInput';
import TodoList from '@/components/TodoList';
export default {
name: 'App',
components: {
TodoInput,
TodoList
},
data: () => ({
//
}),
};
</script>
<!-- src/components/TodoInput.vue -->
<template>
<v-container fluid>
<v-row class="mt-6" justify="center">
<v-col cols="4">
<v-text-field outlined></v-text-field>
</v-col>
<v-col cols="1">
<v-btn block x-large color="primary">Add</v-btn>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
}
</script>
<style>
</style>
<!-- src/components/TodoList.vue -->
<template>
<v-container>
<TodoItem/>
<TodoItem/>
<TodoItem/>
</v-container>
</template>
<script>
import TodoItem from '@/components/TodoItem';
export default {
components: {
TodoItem
}
}
</script>
<style>
</style>
<!-- src/components/TodoItem.vue -->
<template>
<v-container fluid>
<v-row class="mb-3 text-center" justify="center">
<v-col cols="1">
#1
</v-col>
<v-col cols="2">
Todo Title
</v-col>
<v-col cols="1">
<v-btn block color="primary">Edit</v-btn>
</v-col>
<v-col cols="1">
<v-btn block color="error">Delete</v-btn>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
}
</script>
<style>
</style>
์ ์ฅ ํ ์คํํ๋ฉด Vuetify Tag๊ฐ ์ ์ฉ๋ ํ๋ฉด์ ๋ณผ ์ ์๋ค.
๋ค๋ฅธ UI ์์ ์ ํ์ง ์๊ณ , ์์ ๋ผ ๊ฐ๋จํ Vuetify ์์ฑ๋ง ์ฌ์ฉํ๋ค.
๋ค์ ๊ธ์ Vuex ์ฐ๊ฒฐํด์ store ๊ด๋ฆฌ๊น์ง ๐
'Frontend > Vue.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Vue.js] Vue2 vs Vue3 ๋ณํ๋ ์ (0) | 2022.07.20 |
---|---|
[Vue.js - Vuex] Todo List ๋ง๋ค๊ธฐ โข (0) | 2022.06.08 |
[Vue.js - Vuex] Todo List ๋ง๋ค๊ธฐ โก (0) | 2022.06.01 |
[Vue.js - Vuetify] Vuetify ์ถ๊ฐํ๊ธฐ ๐ (0) | 2022.05.29 |