이 포스팅은 Max의 Vuejs 강좌 내용을 정리한 것이고, VueJS의 개념을 익히고 연습해보기 위한 튜토리얼을 다룬 글 입니다.
이번 포스팅은 Stock-Trader Project Tutorial
의 마지막 편입니다.Filter
, Animation
을 추가하고 vue-resource
를 활용해 Firebase
와 연결해서 데이터를 저장하고 불러오는 기능까지 구현하여 이번 튜토리얼을 마치려고 합니다.
1. Filter
기능 추가 하기
1. funds
값 표시하기
Filter
기능을 적용하기 위해funds
state를 표시할 요소를Header.vue
와Home.vue
에 추가합니다.
1 | <template> |
1 | <template> |
2. filter
등록하기
main.js
에 프로젝트 어디에서나 사용 할 수 있도록filter
를 등록해줍니다.- 사용할
filter
의 이름은currency
이고 변수 앞에$
표시를 붙여주는 단순한filter
입니다.
1 | //...생략... |
3. filter
사용하기
- 1번 과정에서
Header.vue
와Home.vue
에 추가한funds
요소 안에 아래 코드와 같이 파이프라인 뒤에 사용할 필터 이름을 추가해줍니다.
1 | <!--...생략...--> |
1 | <!--...생략...--> |
2. 주문량 제한하는 기능 추가하기
Stocks
페이지나Portfolio
페이지에서 각Stock
컴포넌트를 통해 사거나 파는 액션을 실행하면서funds
와order
주문량에 따라서 가능한 범위 내에서만 주문할 수 있도록button
요소에 제한하는 기능을 추가해봅니다.insufficientFunds
,insufficientQuantity
메소드를 만들고button
과input
요소에 추가해줍니다.- 상태가 변했을 때 스타일이 변할수 있도록 설정한 클래스를
<style>
에 추가해줍니다.<style scpoed>
와 같이style
태그 안에scoped
라는 속성을 추가하면 해당 컴포넌트의 요소들에만 영향을 주고 다른 컴포넌트의 요소들에는 전혀 영향이 가지 않도록 할 수 있습니다.
1 | <template> |
1 | <template> |
3. End Day
랜덤 시세 변경 기능 추가하기
1. RND_STOCKS
mutation 만들기
- 이전 포스팅에서는 비어 두웠던
RND_STOCKS
mutation에 그냥 적당한 선에서 각stock
의price
값이 랜덤하게 변경할 수 있도록 기능을 추가해 줍니다.
1 | // ...생략... |
2. endDay
기능 추가하기
RND_STOCKS
mutation을 실행하는 action인randomizeStocks
을 활용해서 클릭했을 때 실행 할 메소드를 추가해줍니다.
1 | <template> |
4. Animation
효과 추가하기
VueJS
에서는Animation
효과를 좀 더 명확하고 구조적으로 적용할 수 있는transition
이라는 요소가 있습니다.- 자세한 API는 이 링크를 참조해주세요. Transition
- 먼저
Animation
효과를 적용하기 위해서는 적용할 요소를transition
요소로 감싸주고name
과mode
를 지정해줍니다. - 그러면 지정된
transition
요소의name
뒤로-enter-active
,-leave-active
, 등의 포스트픽스가 붙는 이름의 클래스 안에 각 상태에 맞는 효과를 추가해줍니다.- 관련된 보다 자세한 사항들도 위 링크를 참주해주세요.
1 | <template> |
위의 설정을 완료하면 이와 같은 Animation
효과를 확인하실 수 있습니다.
5. Firebase
에 데이타 저장하고 불러오기
마지막으로 대망의 Firebase
와 연결하기 입니다.vue-resource
설정을 추가하기 이전에 save
, load
기능을 사용할 dropdown
요소를 열었다 닫았다 할 수 있도록 간단히 세팅해줍니다.
1 | <template> |
1. Firebase
초기 세팅하기
먼저 Firebase
계정을 생성하고 프로젝트 초기 세팅을 하는 부분은 firebase 초기 세팅 이곳을 참고해주시기 바랍니다.
2. main.js
에 vue-resource
와 Firebase
추가하기
- 가장 먼저 터미널에서
npm install --save vue-resource
를 실행하여vue-resource
모듈을 설치합니다. - 그리고 아래 코드와 같이
main.js
에vue-resource
모듈을 추가하고 DB의 root 주소를 등록해주면 기본 설정은 모두 완료된것입니다. 참 간단하죠~^^
1 | //...생략... |
3. 데이타 저장하기
saveData
메소드에서 DB에 현재 저장할 데이터들을 추가해줍니다.vue-resource
의 API는this.$http.put
와 같이this.$http
뒤에 필요한 메소드를 붙혀서 사용할 수 있습니다.put
메소드를 사용할 때는data.json
테이블이름.데이타타입
과 같이 데이타를 저장할 위치와 형태를 결정해주고 추가할 데이타를 변수로 넘겨주면 됩니다.
dropdown-menu
에서Save Data
메뉴에saveData
메소드를 추가해줍니다.
1 | <template> |
4. 데이타 불러오기
- 초기에
SET_STOCKS
mutation으로 고정된 초기값으로 데이타를 불러오는 부분은 있었지만 새로 생성된portfolio
데이타를 불러와서 초기 설정 해주는 부분이 없었습니다. 그래서portfolio.js
모듈 안에portfolio
데이타를 설정해주는SET_PORTFOLIO
mutation을 추가해줍니다.
1 | // ...생략... |
- 이 프로젝트의 DB에서 데이타를 불러오는 것은
Stocks
,Portfolio
와 관련된 모든 데이타를 불러오는 것이기 때문에 어디서나 공통으로 사용하는loadData
action을 따로 생성해줍니다. - 이렇게 공통적으로 사용해야 하는 기능은 action만 따로 모아서 등록을 해놓을 수도 있습니다.
- 컴포넌트 환경과는 다르게 JS에서
vue-resource
를 사용할 때는Vue
인스턴스를 활용해서Vue.http
뒤에 메소드를 호출하는 방식으로 사용합니다. loadData
action 에서는 저장하기에서 데이타를 저장했던 위치와 형태 그대로get
메소드로 데이타를 호출하고 데이타를 각 컴포넌트에서 사용하는 형태로 변환하여 전달해줍니다.
1 | import Vue from 'vue'; |
- 그리고 생상한
actions.js
는store.js
에 추가해줍니다.
1 | // ...생략... |
- 마지막으로 등록된
loadData
action을 Header 컴포넌트에 추가해줍니다. - 아래 코드에서 기존 코드와 조금 바뀐점은
mapActions
헬퍼함수 안에 action의 key 값을 설정해주는 부분입니다.- 기존 코드에서는
...mapActions([])
배열 안에 필요한 action을 등록해주었었는데 그래서 key 값을 따로 설정해줄 수는 없었습니다. - 프로젝트에 기능이 점점 추가되고 action 들이 많아지기 시작하면 이름들이 중복될 수도 있고 헷갈릴수도 있기 때문에
...mapActions({})
처럼 객체를 사용하면 등록한 action의 key값을 별도로 정의할수도 있습니다. 그리고 해당 컴포넌트 내에서는 그 key로 해당 action을 사용하면 됩니다.
- 기존 코드에서는
1 | <template> |
5. 페이지 접속시 데이타 불러오기
Load Data
버튼이 있기는 하지만 앱에 접속 했을 때 바로 이전 데이타를 불러오는 것이 자연스럽기 때문에 앱 접속시 이전 데이타를 바로 불러올 수 있도록App.vue
에loadData
action을 추가해줍니다.- VueJS는 컴포넌트의
script
영역에서created
라이프사이클 훅을 사용해서 요소들이 렌더링이 되기 전에 미리 데이타를 로딩 해놓을 수 있습니다.created
외에도 다양한 라이프사이클을 활용 할 수 있습니다.
1 | <!--...생략...--> |
기본적인 구조를 잡고 컴포넌트를 만드는 것 부터
vue-router
,vuex
,vue-resource
까지VueJS
를 활용하여 SPA를 만드는 과정을 소개해보았습니다. 깊이 있는 내용은 많이 다루지 못했지만 전체적인 흐름으르 한번 체험해보면VueJS
를 학습하는데 조금 도움이 되지 않을까 싶어서 작성하기 시작한 포스팅이었습니다. 한분에게라도 도움이 되는 글이 되었다면 감사할것 같습니다. 좀 더 필요하신 부분이나 보완할 점이 있다면 댓글로 의견 남겨주시기 바랍니다. 감사합니다.
git clone https://github.com/hanwong/vue-stock-trader.git
으로 프로젝트를 다운로드하고git checkout step07
로 프로젝트의 최종 결과물을 확인 하실 수 있습니다.