// login function const frm = new FormData() frm.append('userid', this.userid) // model로 연결되어 있으므로 this.userid frm.append('password', this.password) // model로 연결되어 있으므로 this.password this.$axios.post(`login/proc`, frm)
수신하는 back-end 의 경로가 http://localhost:8000/login/proc
proxy에 /login 설정이 되어 있으므로 proxy에서 "/":"localhost:8000" 으로 하면 proxy로 바로 redirect 되므로 경로가 있어야 함.
하지만 proxy로 하는경우 경로 구별을 위해 /api/ 라는 경로를 주어 분리하는 용도로 사용해 봐야겠음.
src/store/index.js 에서 state 안에 video dataset(videos)을 선언해둔다.
Home.vue 에서 videos 를 사용하는데 style 관련해서 sass 를 사용하므로 두개의 모듈을 추가로 설치한다 npm i sass-loader 로 최신버전을 깔았더니... Syntax Error: TypeError: this.getOptions is not a function 에러가 나네... 쩝. 이런경우 npm uninstall sass-loader 로 삭제하고 10버전을 설치한다. vue랑 sass-loader 버전이 호환되지 않는 경우가 있다고 하네...
npm install --save sass-loader@10 npm i node-sass
src/views/Home.vue 를 수정한다. video dataset 이 목록으로 나오는 것을 확인할 수 있다.
이제 목록을 클릭하면 상세로 들어가자. 보통은 VideoWatchList -> VideoWatchDetail 과 같이 목록에서 상세로 가는데 Home 화면에 목록이 나오므로 VideoWatch화면을 상세로 사용하자. 그러기 위해서는 목록에서 값을 상세로 넘겨줘야하는데...
일단 화면의 링크를 클릭해봤는데 video watch화면이 나오네?? 흠...
src/route/index.js path에 id를 받을 수 있게 :id 를 추가하고, params: true 로
url에 id가 넘어올 것이므로 VideoWatch.vue 에서 id를 이용해 store의 state 안에 있는 videos 에서 id로 값을 가져오게 한다.
computed에서 video라는 function을 정의하고 this.$store.state 로 state값에 접근하여 videos를 찾는다. 이때 this.$route.params.id 를 Number()로 감싸서 숫자로 바꾸어 주는데 이유는 videos 에 id 가 숫자로 되어있기 때문이다.
Number()로 감싸지 않으면 숫자와 문자를 비교하게 되어 return되는 값이 없다. id를 '1' 과 같이 문자로 처리하면 Number()로 감싸줄 필요 없다.
결과는 this.$route.params.id 를 넘겨서 state.videos 에서 id에 해당하는 값을 가져왔다.
참고1. console.log(this.$store.state.videos) 를 찍었을 때 data가 Proxy 아래로 나타나게 되는데 이것은 상관하지 않아도 된다. 똑같이 array며 표현만 저렇게 된 것임.
참고2 store/index.js 에 videos 를 선언한 것은 vuex 3.x 형 표현이다. vuex 4.x 로 하면 형태가 조금 다른데 3.x 대 형태도 문제없이 동작한다.
목록을 뿌려줄 때 videos에 목록을 정의해서 사용했는데 실제로는 서버에서 값을 받아온다. axios 는 프로젝트 설정에서 이미 set했으므로 바로 사용가능하다.
pages/videos/index.vue 에서 script 에 data(){ return { videos : [ ... ] } } 으로 정의 한 부분을 주석하고 axios 호출로 바꾼다. return을 videos 로 해야 위에 v-for에서 videos 로 사용이 가능하다.
videos 에서 목록을 뿌려주고 목록에서 item선택시 해당 page로 이동할 준비는 끝났다. 이제 여기에서 link작업만 하면 해당 page로 이동하려면 <nuxt-link>에 :to 로 경로를 넣는다. 따옴표 안에 "` `" 키보드 1번 옆에 있은 ` 를 쓰는 점에 유의
클릭시 해당 page로 이동하는 것을 확인할 수 있다.
수정화면으로 이동하려면 마찬가지로 nuxt-link를 이용하여 경로에 edit로 가도록하고 button으로 정의하여 Edit button 이 화면에 나옴
pages/videos/_id.vue 파일을 pages/videos/_id 폴더 아래에 index.vue 파일로 옮긴다.
pages/videos/_id/edit.vue 파일을 만들어 Edit라는 내용을 추가한다. (기존 _id.vue 는 _id.vue_old 로 이름을 바꿈)
http://localhost:8000/videos/1/edit 로 pages/videos/videos.vue + edit.vue의 내용이 나오는 것을 확인할 수 있다. ( videos.vue 안에 <nuxt-child/> 태그가 있으므로 )
자꾸 _id.vue와 index.vue 가 나와서... 아래 설명내용이 맞는지는... 검증이 필요한데... 결과는 확인되므로 일단은 적어놓기로 pages/videos/_id.vue 라는 파일을 만들고 dataSet을 정의한다. <next-child>에 전달할 parameter를 넣는다. 넘기는 parameter 이름을 video로 하고 data는 가져오는 functionName( videoData )을 사용한다.
넘어오는 Data들을 받아서 처리하는 부분을 보자 /pages/videos/_id/index.vue 파일에서 props 로 video 를 받는다. 받았으면 {{ video }} 로 확인가능.
/pages/videos/_id/edit.vue 파일에서도 동일하게 props 로 video 로 받은뒤 이번에는 {{ video.name }} 으로 확인가능.