'Web 프로그램/Vue'에 해당되는 글 2건

728x90

Vue.js 기본 제공된 소스를 수정하기 위해서 먼저 해주어야 할 사항이다.

 

커맨드 창에서 npm install vue-router --save

 

https://bootstrap-vue.org/ 사이트에 접속하여 Get Started 버튼을 눌러서 순서대로 진행한다.

 

커맨드 창에서 아래 명령어를 입력한다.

yarn add vue bootstrap bootstrap-vue

 

 

위와 같은 에러 메시지가 나오면 CMD 창을 관리자 권한으로 열어서 명령어를 입력해야 한다.

관리자 권한으로 CMD 창 여는 방법

Window 키 + R 누르고 메시지 창에 cmd 입력하고 Ctrl + Shift + Enter키 누른다.

 

 

 

 

Vue.js 기초를 이해하기 위해서 "한시간만에 끝내는 Vue.js" 유투브 강좌를 듣고 실습한 걸 토대로 구글링해서 내용을 좀 더 추가하여 적어둔다.

https://www.youtube.com/watch?v=sqH0u8wN4Rs 

 

작업한 파일 구조

- 추가한 폴더 : layout 폴더, views 폴더

- 추가한 파일 : Header.vue, Home.vue, About.vue, router.js

- 수정한 파일 : App.vue, main.js

 

 

소스코드

<!--App.vue-->
<template>
  <div id="app">
    <Header />
    <div id="content" class="content">
      <router-view></router-view>
    </div>
 
  </div>
</template>
 
<script>
import Header from './components/layout/Header.vue'
 
export default {
  name'App',
  components: {
    Header,
  }
}
</script>
 
<style>
</style>
 

<Header /> 에서 />로 넣어주는 것을 self closing tag 라고 한다.

<br /> 가 예전에는 <br> 이었는데 self closing tag 를 추가하는 것이 최신 문법이다.

 

// main.js
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import { BootstrapVue, IconsPlugin } from 'bootstrap-vue'
 
// Make BootstrapVue available throughout your project
Vue.use(BootstrapVue)
// Optionally install the BootstrapVue icon components plugin
Vue.use(IconsPlugin)
 
// Import Bootstrap an BootstrapVue CSS files (order is important)
import 'bootstrap/dist/css/bootstrap.css'
import 'bootstrap-vue/dist/bootstrap-vue.css'
 
Vue.config.productionTip = false
 
new Vue({
  router,
  render: h => h(App),
}).$mount('#app')
 

 

// router.js
import Vue from "vue";
import VueRouter from "vue-router";
import Home from "./views/Home";
import About from "./views/About";
 
Vue.use(VueRouter);
 
const router = new VueRouter({
    mode: "history",
    routes: [{
        path: "/",
        component: Home
    },
        {
            path: "/about",
            component: About
        },
    ]
});
 
export default router;
 

 

 
<!--Header.vue-->
<template>
  <div>
    <b-navbar toggleable="lg" type="dark" variant="info">
      <b-navbar-brand href="#">NavBar</b-navbar-brand>
 
      <b-navbar-toggle target="nav-collapse"></b-navbar-toggle>
 
      <b-collapse id="nav-collapse" is-nav>
        <b-navbar-nav>
          <b-nav-item href="#">Link</b-nav-item>
          <b-nav-item href="#" disabled>Disabled</b-nav-item>
        </b-navbar-nav>
 
        <!-- Right aligned nav items -->
        <b-navbar-nav class="ml-auto">
          <b-nav-form>
            <b-form-input size="sm" class="mr-sm-2" placeholder="Search"></b-form-input>
            <b-button size="sm" class="my-2 my-sm-0" type="submit">Search</b-button>
          </b-nav-form>
 
          <b-nav-item-dropdown text="Lang" right>
            <b-dropdown-item href="#">EN</b-dropdown-item>
            <b-dropdown-item href="#">ES</b-dropdown-item>
            <b-dropdown-item href="#">RU</b-dropdown-item>
            <b-dropdown-item href="#">FA</b-dropdown-item>
          </b-nav-item-dropdown>
 
          <b-nav-item-dropdown right>
            <!-- Using 'button-content' slot -->
            <template #button-content>
              <em>User</em>
            </template>
            <b-dropdown-item href="#">Profile</b-dropdown-item>
            <b-dropdown-item href="#">Sign Out</b-dropdown-item>
          </b-nav-item-dropdown>
        </b-navbar-nav>
      </b-collapse>
    </b-navbar>
  </div>
</template>
 
<script>
export default {
  name"Header"
}
</script>
 
<style scoped>
 
</style>

 

<!--Home.vue-->
<template>
<div>
  <h2>Welcome to {{ title }}!</h2>
  <input type="text" v-model="input1">
  <button @click="getData">Get</button>
  <button @click="setData">Set</button>
  <div><p></p></div>
  <select class="form-control" v-model="region" @change="changeRegion">
    <option :value="d.v" v-for="(d,i) in optins" :key="i">{{d.data}}</option>
  </select>
  <div><p></p></div>
  <table class="table table-bordered" v-if="tableShow">
    <tr v-for="(d,i) in optins" :key="i">
      <td>{{d.v}}</td>
      <td>{{d.data}}</td>
    </tr>
  </table>
</div>
</template>
 
<script>
export default {
  name"Home",
  data(){
    return {
      // v-model 을 통해서 데이터 바인딩 처리
      title: "MySite",
      input1: "abc",
      optins: [
        {v:"S", data:"서울"},
        {v:"B", data:"부산"},
        {v:"D", data:"대전"},
      ],
      region: "D",
      tableShow: false,
      // v-show 는 랜더링을 하지만, v-if는 랜더링 자체를 하지 않는다.
    }
  },
  watch:{
    input1(){
      // 특정 데이터를 모니터링하고 있다가
      // 캐치해서 새로운 작업 수행 처리
      console.log(this.input1);
    },
  },
  methods: {
    getData(){
      alert(this.input1);
    },
    setData(){
      this.input1 = "12345";
    },
    changeRegion(){
      alert(this.region);
    },
  },
  // Vue LifeCycle
  beforeCreate(){
    // Vue 인스턴스가 초기화된 직후에 발생한다.
    // 컴포넌트가 DOM에 추가되기도 전이다.
    // data, event, watcher에 접근하기 전이라 data, methods에도 접근할 수 없다.
    console.log("beforeCreate");
  },
  created(){
    // beforeCreate() => data() => created() 순으로 실행된다.
    // data에 직접 접근이 가능하지만, 아직 템플릿과 가상DOM에는 접근할 수 없다.
    // 이제 data와 events가 활성화되어 접근할 수 있다.
    console.log("created");
  },
  beforeMount(){
    console.log("beforeMount")
  },
  mounted(){
    // 가상 DOM의 내용이 실제 DOM에 부착되고 난 이후에 실행되므로,
    // data, computed, methods, watch 등 모든 요소에 접근이 가능하다.
    console.log("mounted");
  },
  beforeUpdate(){
    // DOM이 패치되기 전에 데이터가 변경될 때 호출된다.
    console.log("beforeUpdate");
  },
  updated(){
    // 데이터가 변경되어 가상 DOM이 다시 렌더링되고 패치된 후에 호출된다.
    console.log("updated");
  },
  beforeDestroy(){
    // 해당 인스턴스가 소멸(뷰 컴포넌트 제거)되기 직전에 beforeDestroy훅이 호출된다.
    console.log("beforeDestroy");
  },
  destroyed(){
    // 인스턴스가 소멸되고 난 직후에 destroyed 훅이 호출된다.
    // Vue의 모든 디렉티브(v-)가 바인딩 해제되고
    // 모든 이벤트 리스너가 제거되며 모든 하위 Vue 컴포넌트도 삭제된다.
    console.log("destroyed");
  },
 
}
</script>
 
<style scoped>
 
</style>

 

<!--About.vue-->
<template>
<div>
  <h1>About Page</h1>
</div>
</template>
 
<script>
export default {
  name"About"
}
</script>
 
<style scoped>
 
</style>
 

 

 

'Web 프로그램 > Vue' 카테고리의 다른 글

Vue.js 환경 설정  (0) 2022.01.13
블로그 이미지

Link2Me

,
728x90

Vue.js 는 웹프론트엔드 프레임웍 중 하나이다.

프론트엔드 프레임웍은 React, Vue.js, Angular 가 있고 대세는 React 라고 한다.

2021년도에는 Javascript/jQuery 가 많이 사용되었는데 React 가 1위로 올라섰다고 한다.

 

Vue.js 는 컴포넌트 기반의 SPA(Single Page Application)를 구축할 수 있게 해주는 프레임워크이다.

 

Python Django 강의를 듣는데 Front-End 로 Vue.js 를 사용하고 있어서 간단하게 알아두어야 할 거 같아서 유투브 동영상을 보고 간략하게 기록해 두고 있다.

 

Vue 는 node.js 기반으로 되어있기 때문에 node가 설치되어야 한다. 

https://nodejs.org/ko/ 에서 LTS 버전을 다운로드 받아 C:\ProgramFiles\nodejs 폴더에 설치한다. (default 설치 폴더)

 

커맨드 창에서 npm install --global yarn 을 실행하여 yarn을 설치를 한다.

yarn global add @vue/cli 를 입력하여 vue.js 를 설치한다. (npm install -g @vue/cli 명령어와 동일)

 

npm install vue 는 하지 말라. 위에 yarn global add @vue/cli 만 하면 된다.

vue --version 을 했을 때 2.9.6 과 같이 2.X 버전이 설치되어 있다면 지워야 한다.

npm r -g vue-cli  를 하면 지워진다.

 

 

NPM: npm-cli.js not found when running npm 메시지가 나오면, node.js 설치파일을 다시 실행하여 Repair를 하면 해결되더라.

 

VSCode 에서 작업하는 과정은 생략한다.

 

프로젝트 생성

WebStorm 또는 PHPStorm 에서 아래 그림과 같이 선택하고 Create 버튼을 클릭한다.

또는 커맨드 창에서 

vue create {프로젝트명} // 프로젝트명이 폴더로 생성된다.

vue create blog

 

 

생성된 프로젝트는 아래 그림과 같다.

동작구조를 파악하기 위해 빨간색으로 표시된 부분을 주의깊게 보자.

 

 

프로젝트 구조

  • package.json : 지정된 의존성이 node_modules에 설치 된다.
  • node_modules : 앱 개발과 배포에 필요한 npm 패키지들이 저장 된다.
  • src : 개발자가 작성한 코드 디렉토리
  • public
    • 공용으로 접근 가능한 정적 파일이 저장 된다.
    • 배포버전을 빌드할 때 필요한 파일이 저장 된다.
  • dist
    • 빌드한 결과물이 저장 된다. (운영 서버에 배포할 파일이다.)

 

yarn serve 개발용 버전으로 웹 실행 (npm run server 와 동일 명령어)

터미널 창을 누르고 yarn serve 를 입력하고 엔터키를 치면....

 

 

위 그림의 빨간색을 누르면 아래와 같이 Web 브라우저가 구동되며 화면이 보이게 된다.

 

여기까지가 Vue.js 기본 환경 설정 방법이다.

 

build 배포용 버전으로 dist 생성
yarn build

'Web 프로그램 > Vue' 카테고리의 다른 글

Vue.js 기본 화면 수정하기  (0) 2022.01.14
블로그 이미지

Link2Me

,