vue-cli2로 개인 비즈니스 페이지를 만들었습니다.
개요
매년 페이지를 갱신하고 있습니다만, 이번은 vue.js가 신경이 쓰였으므로 vue-cli를 사용해 홈페이지를 만들어 보는 것에. 그 때 사용한 것이나, 한 일 등의 정리가 됩니다.
vue-cli는 3을 사용할 수 있게 되었습니다만, 정보가 적은 것 같았기 때문에 2로 했습니다. (비비)
개발 환경 : windows, bitbuket, vue-cli2.9.5
프로덕션 : apache2, centos6
할 수있는 것
프로젝트 만들기 && 사용하는 모듈 설치!
とりあえずvue-cliをインストール!
npm install -g vue-cli
プロジェクトを作成する。特に設定は変えずにEnterで進めた。
vue init webpack codelike2018
レスポンシブ対応などを楽にするためbootstrap4とアイコンが使いたかったのでopen-iconicを入れた。
bower install bootstrap4 --save
bower install open-iconic --save
そのままだと、bower_componentが変なところに行っちゃうので、.bowerrcを下記のように設定
.gitignoreにも/src/libraryを追加してgit管理されないようにした。
{
"directory":"src/library"
}
npmで下記をインストールした。
"dependencies": {
"axios": "^0.18.0", /*--wpとのajax通信のため--*/
"vue-carousel": "^0.8.1", /*--トップページがさみしいのでカルーセルで画像流す用--*/
"vue-js-modal": "^1.3.15", /*--モーダル画面を表示するため(簡単につかえて便利)--*/
}
소스를 써보세요
ページのルーティングを作る
src\router\index.js
にURLルーティングのためのファイルが出来上がるので、そこにアクセスされたときに対応するコンポーネントをぱぱーっと書く。
import Vue from 'vue'
import Router from 'vue-router'
import Top from '@/components/Top'
import About from '@/components/About'
import Profile from '@/components/Profile'
import Service from '@/components/Service'
import Contact from '@/components/Contact'
import Blog from '@/components/Blog'
import NotFound from '@/components/NotFound'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',
name: 'Top',
component: Top
},
{
path: '/about',
name: 'About',
component: About
},
{
path: '/service',
name: 'Service',
component: Service
},
{
path: '/profile',
name: 'Profile',
component: Profile
},
{
path: '/contact',
name: 'Contact',
component: Contact
},
{
path: '/blog',
name: 'Blog',
component: Blog
},
{
path: '/404',
name: 'NotFound',
component: NotFound
},
{
path: '*',
redirect: { name: 'NotFound' }
}
]
})
レイアウトを作る
基本となるレイアウトは src\App.vue
に記載する。
router-viewタグ
の箇所にそれぞれのコンポーネントの内容が反映される。
transitionタグで囲むことで、画面遷移するときにclassが付加されるので、cssアニメーションを書くことができる。
メニューはSmartphoneNav.vueとSideNav.vueコンポーネントに分けてみた。
コンポーネントを呼ぶときは imoprt
してcompornentsに列挙する。
<template>
<div id="app">
<div class="d-md-none">
<div class="row">
<div class="col-12">
<SmartphoneNav />
</div>
</div>
</div>
<div class="row">
<div class="col-md-2 d-none d-md-block">
<nav class="col-md-2 h-100 sidebar" style="position:fixed;">
<SideNav />
</nav>
</div>
<div class="col-md-10 col-xs-12 col-sm-12">
<transition name="fade">
<router-view />
</transition>
</div>
</div>
</div>
</template>
<script>
import './library/bootstrap4/dist/css/bootstrap.css'
import './library/open-iconic/font/css/open-iconic-bootstrap.css'
import SideNav from './components/SideNav'
import SmartphoneNav from './components/SmartphoneNav'
export default {
name: 'App',
components: { SideNav, SmartphoneNav }
}
・・・省略・・・
각 페이지 구성 요소에 내용을 표시합니다.
今回は下記のような感じでコンポーネントを作ってみました!
長くなるので詳細は省略。
- src\components\About.vue
- src\components\Blog.vue
- src\components\Contact.vue
- src\components\NotFound.vue
- src\components\Profile.vue
- src\components\Service.vue
- src\components\SideNav.vue
- src\components\SmartphoneNav.vue
- src\components\Top.vue
모듈의 사용법과 궁리한 곳
vue-carousel
カルーセルが簡単に実装できます。下記のような感じで書きました。
<carousel :per-page="1" :loop="true" :autoplay="true">
<slide>
<img src="../assets/topimg_1.jpg" class="w-100 h-100">
</slide>
<slide>
<img src="../assets/topimg_2.jpg" class="w-100 h-100">
</slide>
<slide>
<img src="../assets/topimg_3.jpg" class="w-100 h-100">
</slide >
</carousel>
`import { Carousel, Slide } from 'vue-carousel' して上記のような感じでtemplate書くと
勝手にカルーセルしてくれます。
per-pageがスクロールするページ数(初期は2つのslideが一緒になっている) loop=trueでループしてくれる。autoplayは自動スライド。
vue-js-modal
モーダル画面が簡単に実装できます。
<modal name="send_message" id="send_message" width="80%" height="200">
<div class="send_message_box">
お問い合わせありがとうございました、送信完了しました。<br>
内容確認後、折り返し連絡いたします。<br>
<button class="btn btn-primary btn-block mt-5" v-on:click="closeDialog">閉じる</button>
</div>
</modal>
main.jsに読み込む設定を書いとけば、後は上記のようにテンプレートに記載して、
methodsで呼ばれるメソッドに this.$modal.show('send_message')
みたいに書くとモーダルとして開きます。明示的にモーダルを閉じるときは this.$modal.hide('send_message')
と書けばOK
axios
ajax通信を行うために入れました。
wordpress rest apiを使ってblogの内容を一部とってきて、表示させてみました。
mounted () {
this.$modal.show('pre_load')
axios.get('http://blog.codelike.info//wp-json/wp/v2/posts').then(response => (this.blogData(response.data)))
}
mountedに上記のように書きました。loadモーダル画面を表示してaxiosでデータを取得。
あとはtemplateのほうで、 v-for
属性を使用してループさせて表示させています。
어려움
npm run buildしてbuildしたときに、styleの優先度が変わったのか画面が崩れたりした。。
あまり使いたくないけど !importantをそれぞれつけることで解決した。
この辺はよくわからなかった
기타
google analytics 설정, 페이지 제목 등
index.htmlに書いておけばOK。
favicon 무슨 일이야?
static配下に置いて、index.htmlに読み込み設定書けばOK。
프로덕션 환경에서 움직일 때
npm run build
コマンドで /dist/にindex.htmlと共にファイルがまとめられるので、それをサイトのルートフォルダにおけばOK
소감
angularを使うより手軽に使えて、自由度が高い気がしました。
モダンjs(ES6)に弱いので、ちょっと戸惑いましたorz
コンポーネントに分けることで、管理もしやすそうだしよかったです。
あんまり手をいれることはなさそうですが・・・
Reference
이 문제에 관하여(vue-cli2로 개인 비즈니스 페이지를 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yasuaki0206/items/4c4d96319a921eefd5da텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)