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 ๊ด€๋ฆฌ๊นŒ์ง€ ๐Ÿ˜Š

+ Recent posts