728x90

Project setting

Youtube 강좌 따라하기 : https://youtu.be/vaCrzaeC-RE

vue create 프로젝트 이름
vue create screencast
일단은 세팅하지 말고 default로 하면 폴더가 아~주 빈약하다.
따라서 default 세팅은 하지 말자...

아래 내용은 default 설정 Episode 정도로만 봐 주자.

----
추가로 만들 것들이 많다. ㅎ

우선 router부터

npm install vue-router
설치가 끝나면
src/router/index.js 파일을 만들어서 필요한 내용을 정의한다.

기본 포맷은

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

 

필요한 파일을 생성한다.
(views 폴더도 없다니...)
src/views/Home.vue
src/views/About.vue
두 개의 파일을 생성한다.

-- Home.vue
<template>
  <div class="home">
    <h1>This is an Home page</h1>
  </div>
</template>
-- About.vue
<template>
  <div class="about">
    <h1>This is an about page</h1>
  </div>
</template>

 

src/route/index.js 파일을 다음과 같이 정의한다.

import Vue from "vue";
import VueRouter from "vue-router";
import Home from "../views/Home.vue";

Vue.use(VueRouter);

const routes = [
  {
    path: "/",
    name: "home",
    component: Home
  },
  {
    path: "/about",
    name: "about",
    component: () =>
      import(/* webpackChunkName: "about" */ "../views/About.vue")
  }
];

const router = new VueRouter({
  routes
});

export default router;

Home.vue 는 상단의 import 구문으로 정의했고
About.vue 는 component 안에서 import로 불러온다.

설정을 마치고 npm run serve로 가동하면 에러는 없으나... 화면이 하얗다.
process.env.BASE_URL 을 못찾는다고 에러가나는데... 진짜로 없다.

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})


그래서 default 말고 몇가지 설정한 프로젝트를 실행해보니... process.env.BASE_URL 이 문제가 되지 않는다 ㅜㅜ.

default 설정은 빨리 포기하자. ㅋ

728x90
728x90

목록을 뿌려줄 때
videos에 목록을 정의해서 사용했는데 실제로는 서버에서 값을 받아온다.
axios 는 프로젝트 설정에서 이미 set했으므로 바로 사용가능하다.

 

pages/videos/index.vue 에서 script 에 data(){ return { videos : [ ... ] } } 으로 정의 한 부분을 주석하고
axios 호출로 바꾼다.
return을 videos 로 해야 위에 v-for에서 videos 로 사용이 가능하다.

728x90
728x90

공통으로 적용할 header, footer 같은것을 적용하기 위해서
layout을 설정한다.
현재버전의 Nuxt는 생성했을 때 layouts 설정이 되어있지 않으므로
루트 아래 layouts 폴더를 생성하고 그 아래여 default.vue 파일을 추가한다.

새로고침을 했을 때 적용되지 않는 경우가 있으므로 stop한 뒤 재가동시켜서 확인하면
아래 그림과 같이 Home, Videos가 화면 위에 나타나는 것을 확인할 수 있다.

 

기본 layout인 default 외에 다른 layout을 사용하려면 layouts 폴더에 추가한 뒤 사용한다.
우선 layouts/theatre_layout.vue 를 생성한다.
<div> 아래에 <nuxt/> 를 넣는다.
적용되었는지 확인을 위하여 바로위 div tab에 id를 주고 style에서 background color를 보라색으로 바꾼다.


이제 theatre_layout을 적용할 page를 생성한다.
/pages/theatre.vue 를 만들고
export 안에 layout에 사용할 layout 이름을 적어준다
export default { layout: 'theatre_layout' }

http://localhost:8000/theatre 를 실행하면
해당 style이 적용된 것을 확인할 수 있다.

728x90
728x90

videos 에서 목록을 뿌려주고 목록에서 item선택시 해당 page로 이동할 준비는 끝났다.
이제 여기에서 link작업만 하면 해당 page로 이동하려면
<nuxt-link>에 :to 로 경로를 넣는다. 따옴표 안에 "`  `" 키보드 1번 옆에 있은 ` 를 쓰는 점에 유의

클릭시 해당 page로 이동하는 것을 확인할 수 있다.


수정화면으로 이동하려면
마찬가지로 nuxt-link를 이용하여 경로에 edit로 가도록하고 button으로 정의하여 Edit button 이 화면에 나옴

Edit버튼을 클릭하면 해당화면으로 이동하는 것을 확인할 수 있다.


Edit화면에서 다시 view화면으로 가기위해 back버튼을 추가한다.

클릭시 해당 id를 가진 화면으로 이동한다.
(history를 이용하지 않음)

728x90
728x90

블로그의 post와 edit page 와 같이 Edit page를 추가해보자

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 }} 으로 확인가능.

728x90
728x90

pages/videos/index.vue 를 생성했고
pages/videos/_id.vue 를 만들면
http://localhost:8000/videos/1 을 하면 _id.vue 내용이 나온다.

videos 에서 사용한 dataSet을 사용하여 id=1 인 Data만 추출하여 화면에 표시 해 보자

data() 에 videoDataSet 을 정의한 다음 url의 id 를 추출하려면
computed 안에 videoData() funtion을 선언한 뒤 videoDataSet.find 로 route를 통해 전달된 id와 같은 object를 반환하도록 한다.
template 안에 {{ videoData }} 를 출력하면 videoData() 의 결과를 보여준다.
( {{ videoData.name }} 을 하면 이름만 출력 된다.)

 

* 주의 :  filter를 사용하는 경우에는 1과 16이 모두 검색결과로 나타나므로 find를 사용해야 한다.

728x90
728x90

pages/videos 폴더를 추가한 뒤 그 아래에 1.vue 를 생성한다
대충 내용을 입력하고( We're in video 1)
localhost:8000/videos/1 해 보면

어? 1.vue 의 내용이 아닌 이전에 만들어 놓은 videos.vue의 내용이 나온다
자동으로 routing 한다며? 왜 안돼?

이렇게 해 보자. "1.vue"는 저대로 놔 두고(저장은 하고)
pages/videos.vue 파일에 가서 <nuxt-child> 라는 태그를 추가한 뒤 브라우저에 그대로 입력
localhost:8000/videos/1 해 보면
videos.vue 내용 + 1.vue 내용이 합쳐져서 나온다.

 

근데 1.vue만 보고 싶은데 어떻게 하느냐
/pages/videos.vue 파일을 /pages/videos/index.vue 로 이름을 바꾸어 옮긴다.
http://localhost:8000/videos 를 하게되면 자동으로 index.vue 파일의 내용을 보여준다.

http://localhost:8000/videos/1 을 하면 1.vue의 내용만 보여준다.


videos.vue 파일을 videos/index.vue 로 바꾸었는데
그럼 videos.vue 도 있고 videos/index.vue도 있으면 어떻게 될까?
pages/videos.vue 를 추가하여 동일하게 <nuxt-child>내용을 입력 한 뒤 확인
http:localhost:8000/videos 를 입력하면 새로만든 videos.vue 에 index.vue 까지 포함되어 나타난다.

또한
http://localhost:8000/videos/1 을 입력해보면
vedios.vue + 1.vue 가 나타난다.



* 중간 정리
. page 에 vue 파일을 생성하면 주소입력시 바로 확인됨.
. index.vue 파일이 없으면 videos.vue 와 videos/1.vue 처럼 <nuxt-child>를 사용하면 아래에 있는 내용이 같이 나옴
. 파일 내용을 분리하려면 videos폴더 아래에 index.vue 파일을 생성.
. 파일내용이 분리되면 video/index.vue 폴더안에 <nuxt-child> 가 있음에도 "1.vue"의 내용은 나타나지 않음.
. "1.vue" 를 확인해보면 videos.vue + 1.vue 가 나타남.

 

그러면 videos 아래에 1.vue, 2.vue, 3.vue ... 으로 되는 경우
_id.vue 파일을 만들고 호출하면 된다.
/pages/videos/_id.vue 파일을 만들고 1.vue 내용을 복사한다. 다름을 확인하기 위해 느낌표(!!!)를 추가하고 확인한다
http://localhost:8000/2

 

아직 1.vue를 지우지 않았으므로
http://localhost:8000/1 을 입력하면 1.vue 파일 내용이 나온다.

우선순위는 해당 경로에 파일이 있으면 파일우선.
없으면 _id.vue 사용

 

경로에 있는 parameter를 사용하려면
{{ $route.params.id }} 를 쓰면 된다.

728x90
728x90

/pages/videos.vue 파일을 생성한 뒤 내용을 작성한다.

<template>
  <div>
    <h1>Videos</h1>
    <div v-for="video in videos" :key="video.id">
      {{ video.name }}
    </div>
  </div>
</template>

<script>
export default {
  data () {
    return {
      videos: [{ id: '16', name: 'Intro to NuxtJs' }]
    }
  }
}
</script>

<style>

</style>

저장한 후 실행해보면(기본 port를 8000으로 바꾸었으므로 localhost:8000 을 호출)

내용은 videos 라는 data set을 화면에 for 루프를 이용해 뿌려 줌.
Nuxt는 pages 폴더의 파일을 자동으로 routing하므로 따로 경로설정 필요없음.

728x90
728x90

nuxt 시작.
Youtube의 screencast 강좌 참조
매우 만족스러운데 2019년도 에 올라온거라 현재 화면과 조금 다른게 있으나
내용은 크게 다르지 않음.
https://youtu.be/NS0io3Z75GI

 

1. 생성 명령 실행 : npx create-nuxt-app vue-screencast-nuxt

2. 생성이 다 되면 프로젝트 폴더로 이동하여 Run 해 보자
(vue-screencast-nuxt 강좌를 그대로 가기 때문에 프로젝트 이름을 "cd 프로젝트이름" 으로 하면 된다.
시작하려면 npm run dev를 build 한 다음 start하려면 npm run build 하고 npm run start 하면 build로 생성된 것으로 시작된다. 개발모드이므로 npm run dev를 실행한다.
정상적으로 뜨면 Listening: http://localhost:3000/ 이 나온다.

cd vue-screencast-nuxt 한 다음
npm run dev

 

3. Port 변경(optional)
해도 되고 안해도 되는데
front-end, back-end로 분리하게되면 각각 포트를 사용하는데
위 강좌에서는 ruby를 back-end로 쓴다. ruby port가 3000 이어서 둘 중 하나는 바꿔야 하기 때문에
설명함

프로젝트를 생성하면 nuxt.config.js 가 있는데 여기에 설정을 추가한다.
- 추가 전

- 추가 후

저장 후 실행해보면 port가 8000으로 바뀐 것을 확인할 수 있다.

localhost:8000을 브라우저에서 실행해보면
강좌에서와는 조금 다른 내용이 나타난다. (그동안 내용이 바뀜.)
Tutorial.vue라는 Component를 기본으로 하고 pages/index.vue 부터 시작하면된다고 친절하게 설명이 되어있네

728x90
728x90

nuxt.config.js 파일에서

server: { port: 8765 }  를 추가한다.
기본 port는 3000번

ex)
build{
    extend{ config, ctx) {}
}, // 서버를 추가하므로 콤마(,)를 붙인다.

server: {
    port: 8765
}

728x90
BLOG main image
"그게 뭐 어쨌다는 거냐?" 늘 누가 나에게 나에대한 말을할 때면 이말을 기억해라. by nobang

카테고리

nobang이야기 (1951)
Life With Gopro (7)
Life With Mini (79)
Diary (971)
너 그거 아니(do you know) (179)
난 그래 (159)
Study (290)
속지말자 (10)
Project (34)
Poem (15)
Song (0)
Photo (113)
낙서장 (45)
일정 (0)
C.A.P.i (2)
PodCast (0)
nobang (27)
고한친구들 (4)
recieve (0)
History (0)
android_app (2)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :