이 포스팅은 Max의 Vuejs 강좌 내용을 정리한 것이고, VueJS의 개념을 익히고 연습해보기 위한 튜토리얼을 다룬 글 입니다.
이번 포스팅은 Stock-Trader Project Tutorial의 마지막 편입니다.Filter, Animation 을 추가하고 vue-resource를 활용해 Firebase와 연결해서 데이터를 저장하고 불러오는 기능까지 구현하여 이번 튜토리얼을 마치려고 합니다.
1. Filter 기능 추가 하기
1. funds 값 표시하기
Filter기능을 적용하기 위해fundsstate를 표시할 요소를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_STOCKSmutation에 그냥 적당한 선에서 각stock의price값이 랜덤하게 변경할 수 있도록 기능을 추가해 줍니다.
1 | // ...생략... |
2. endDay 기능 추가하기
RND_STOCKSmutation을 실행하는 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_STOCKSmutation으로 고정된 초기값으로 데이타를 불러오는 부분은 있었지만 새로 생성된portfolio데이타를 불러와서 초기 설정 해주는 부분이 없었습니다. 그래서portfolio.js모듈 안에portfolio데이타를 설정해주는SET_PORTFOLIOmutation을 추가해줍니다.
1 | // ...생략... |
- 이 프로젝트의 DB에서 데이타를 불러오는 것은
Stocks,Portfolio와 관련된 모든 데이타를 불러오는 것이기 때문에 어디서나 공통으로 사용하는loadDataaction을 따로 생성해줍니다. - 이렇게 공통적으로 사용해야 하는 기능은 action만 따로 모아서 등록을 해놓을 수도 있습니다.
- 컴포넌트 환경과는 다르게 JS에서
vue-resource를 사용할 때는Vue인스턴스를 활용해서Vue.http뒤에 메소드를 호출하는 방식으로 사용합니다. loadDataaction 에서는 저장하기에서 데이타를 저장했던 위치와 형태 그대로get메소드로 데이타를 호출하고 데이타를 각 컴포넌트에서 사용하는 형태로 변환하여 전달해줍니다.
1 | import Vue from 'vue'; |
- 그리고 생상한
actions.js는store.js에 추가해줍니다.
1 | // ...생략... |
- 마지막으로 등록된
loadDataaction을 Header 컴포넌트에 추가해줍니다. - 아래 코드에서 기존 코드와 조금 바뀐점은
mapActions헬퍼함수 안에 action의 key 값을 설정해주는 부분입니다.- 기존 코드에서는
...mapActions([])배열 안에 필요한 action을 등록해주었었는데 그래서 key 값을 따로 설정해줄 수는 없었습니다. - 프로젝트에 기능이 점점 추가되고 action 들이 많아지기 시작하면 이름들이 중복될 수도 있고 헷갈릴수도 있기 때문에
...mapActions({})처럼 객체를 사용하면 등록한 action의 key값을 별도로 정의할수도 있습니다. 그리고 해당 컴포넌트 내에서는 그 key로 해당 action을 사용하면 됩니다.
- 기존 코드에서는
1 | <template> |
5. 페이지 접속시 데이타 불러오기
Load Data버튼이 있기는 하지만 앱에 접속 했을 때 바로 이전 데이타를 불러오는 것이 자연스럽기 때문에 앱 접속시 이전 데이타를 바로 불러올 수 있도록App.vue에loadDataaction을 추가해줍니다.- 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로 프로젝트의 최종 결과물을 확인 하실 수 있습니다.