1. 程式人生 > >從零開始系列之vue全家桶(4)帶新手小白一起搭建第一個個人網站項目

從零開始系列之vue全家桶(4)帶新手小白一起搭建第一個個人網站項目

轉載 個人網站 rfi red nbsp oot ott osx 全部

未經允許,嚴禁轉載,全文由blackchaos提供。

在安裝好了前面大部分需要的插件,我們開始進行第一個個人項目。結合vue+vuex+vue-cli+vue-router+webpack使用。

1.我們先寫用vue-router來單頁面切換路由。先進入src文件夾。在components文件夾下創建五個文件分別是Home.vue,About.vue,Contact.vue,MyHeader.vue,Myfooter.vue.

將router裏的index.js打開。修改代碼為:

import Vue from ‘vue‘
import Router from ‘vue-router‘
import Home from ‘@/components/Home‘
import About from ‘@/components/About‘
import Contact from ‘@/components/Contact‘
Vue.use(Router)

export default new Router({
  routes: [
    { path: ‘/‘, name: ‘Home‘, component: Home },
    { path: ‘/about‘, name: ‘About‘, component: About },
    { path: ‘/contact‘, name: ‘Contact‘, component: Contact }
  ]
})

註意最後一行要多敲一個回車,滿足ESLint規則。不能用tab鍵來規範代碼,取而代之的是兩個空格。

2.文件由幾部分組成,其中最頂層是src下的App.vue文件。在裏面添加MyHeader,Myfooter。

2.1先修改App.vue

<template>
  <div id="app">
    <MyHeader></MyHeader>
    <transition name="fade" mode="out-in">
        <keep-alive>
          <router-view/>
        </keep-alive>
      </transition>
    <MyFooter></MyFooter>
  </div>
</template>

<script>
import MyHeader from ‘./components/MyHeader‘
import MyFooter from ‘./components/MyFooter‘
export default {
  name: ‘App‘,
  components: {
    MyHeader,
    MyFooter
  }
}
</script>

<style>
#app {
  font-family: ‘Avenir‘, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
.fade-enter-active, .fade-leave-active{
  transition: all .3s;
}
.fade-enter, .fade-leave-to{
  opacity: 0;
}
</style>

註意最後一行要多敲一個回車,script和style全部頂格寫。寫script裏屬性:後面跟一個空格。最後加一個淡入淡出效果。

2.2然後再寫MyHeader.vue

<template>
  <div id="header" class="wrap">
    <div class="header">
      <h1 class="logo">
        <router-link to="/">
          <img src="../assets/logo.png"  width="100">
        </router-link>
      </h1>
    </div>
    <div class="top-nav">
      <div id="navList" class="navlist-wrap">
        <div class="navlist clearfix">
          <span class="nav-btn">
            <router-link to="/">首頁</router-link>
          </span>
          <span class="nav-btn">
            <router-link to="/about">關於</router-link>
          </span>
          <span class="nav-btn">
            <router-link to="/contact">聯系方式</router-link>
          </span>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
export default({
  name: ‘header‘,
  data: function () {
    return {
      ‘nav-btn‘: ‘nav-btn‘
    }
  }
})
</script>
<style scoped>
#header{background-color: red} .header{width:1105px;margin:0 auto;height:111px;padding:4px 0 18px;position:relative;*z-index:1} .header .logo{width:300px;height:100px;margin-left: 10px} .top-nav .navlist-wrap{width:1050px;margin:0 auto;position:relative} .top-nav .navlist{position:absolute;right:130PX;top:-40PX} .top-nav .navlist .nav-btn { float:left; margin-left:60px; color:#666; vertical-align: middle; text-decoration:none; font-size: large; } </style>

註意最後一行要多敲一個回車,router-link to就是切換路由了。

2.3最後是MyFooter.vue

<template>
  <div id="footer">
    <span>Copyright ? <a href="#">blackchaos</a>. All rights reserved</span>
  </div>
</template>
<script>
export default({
  name: ‘footer‘
})
</script>
<style scoped>
#footer{height:50px;position:fixed;bottom:0px;left: 0px;background-color: #eeeeee;width: 100%;padding-top: 10px;}
</style>

註意最後一行要多敲一個回車。  

3.開始三個切換的文件和Store文件:

3.1新建store文件並新建一個store.js文件

import Vue from ‘vue‘
import Vuex from ‘vuex‘
Vue.use(Vuex)

export default new Vuex.Store({
  state: { count: 0 },
  mutations: {
    add: state => state.count++,
    dec: state => state.count--
  }
})

先簡單存一個數據和兩個方法。最後一行敲個回車。

 

3.2在main.js文件中引入store

import Vue from ‘vue‘
import App from ‘./App‘
import router from ‘./router‘
import store from ‘./store/store‘
Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: ‘#app‘,
  router,
  store,
  components: { App },
  template: ‘<App/>‘
})

最後一行敲個回車。  

3.3首先是Home.vue

<template>
  <div id="home">
    <div class="page-header">
      <h2>首頁</h2>
    </div>
    <div class="panel-body">
      <p>{{ count }}</p>
      <p>
        <button @click="add">+</button>
        <button @click="dec">-</button>
      </p>
    </div>
  </div>
</template>
<script>
export default({
  name: ‘home‘,
  data: function () {
    return {
      localCount: 1
    }
  },
  methods: {
    add () {
      this.$store.commit(‘add‘)
    },
    dec () {
      this.$store.commit(‘dec‘)
    }
  },
  computed: {
    count () {
      return this.$store.state.count
    }
  }
})
</script>
<style scoped>
#home{width: 100%;margin: 0 auto;background-color: khaki;height: 400px}
</style>

最後一行敲回車,方法寫在methods裏,this.$store.commit調用.

3.4然後是About.vue和Contact.vue

<template>
  <div id="contact">
    <h2>聯系方式</h2>
  </div>
</template>
<script>
export default({
  name:‘contact‘
})
</script>
<style scoped>
#contact{width: 100%;height: 400px;background-color: lightskyblue;}
</style>
<template>
  <div id="about">
    <h2>關於</h2>
  </div>
</template>
<script>
export default({
  name:‘about‘
})
</script>
<style scoped>
#about{width: 100%;height: 400px;background-color: antiquewhite;}
</style>

 同樣最後一行多一個回車。

 

照方抓藥,給還沒完成的同學一個demo

https://github.com/xuchaoyu2000/vueblog

從零開始系列之vue全家桶(4)帶新手小白一起搭建第一個個人網站項目