1. 程式人生 > 實用技巧 >使用vue2和vue-router移植一個部落格頁面

使用vue2和vue-router移植一個部落格頁面

開始

使用vue腳手架建立一個專案

請移步此處————建立vue專案

建立完成之後在public/index.html目錄下引入專案中需要的bootstrapCDN

<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap-theme.min.css" rel="stylesheet">
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">

刪除原有src/components/Hello.vue資料夾

移植

建立Header.vue,把頭部程式碼寫入

<template>
  <header class="navbar navbar-inverse navbar-fixed-top bs-docs-nav" role="banner">
			<div class="container">
				<div class="navbar-header">
					<button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse">
						<span class="sr-only">響應式導航</span>
						<span class="icon-bar"></span>
						<span class="icon-bar"></span>
						<span class="icon-bar"></span>
					</button>
					<a href="" class="navbar-brand">我的小屋</a>
				</div>
				<nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation">
					<ul class="nav navbar-nav">
						<li role="presentation" class="active"><a href="/">首頁</a></li>
						<li role="presentation"><router-link to="/contact">聯絡</router-link></li>
						<li role="presentation"><router-link to="/about">關於我</router-link></li>
					</ul>
					<form class="navbar-form navbar-right" role="search">
						<div class="form-group">
							<input type="text" class="form-control" placeholder="請輸入文章標題或者作者名稱">
						</div>
						<button type="submit" class="btn btn-default">搜尋</button>
					</form>
				</nav>
			</div>
		</header>
</template>

<script>

  export default {
    name: 'Header',
    data() {
      return {
        
      }
    },
    components: {
      
    }
  }
</script>

<style scoped lang='scss'>
  
</style>

把底部程式碼寫入Footer.vue

<template>
  <footer>
    <div class="container">
      <hr />
      <p class="text-center">Copyright &copy; Powered by Bruce</p>
    </div>
  </footer>
</template>

<script>
export default {
  name: "Footer",
  data() {
    return {};
  },
  components: {},
};
</script>

<style scoped lang='scss'>
</style>

新建Context把文章列表頁面遷移過來

<template>
  <div id="body" class="container">
    <div class="row">
      <div class="col-md-8">
        <h1>最新發布</h1>
        <!-- 標題,標籤,分類,留言總數,釋出時間 -->
        <article>
          <h2><a href="#">這是我的第一篇文章</a></h2>
          <div class="row">
            <div class="col-md-6 col-sm-6">
              <span class="glyphicon glyphicon-folder-open"></span
              >&nbsp;&nbsp;<a href="">標籤</a> &nbsp;&nbsp;<span
                class="glyphicon glyphicon-tags"
              ></span
              >&nbsp;&nbsp;<a href="">分類1</a>,<a href="">分類2</a>,<a
                href=""
                >分類3</a
              >
            </div>
            <div class="col-md-6 col-sm-6">
              <span class="glyphicon glyphicon-comment"></span>&nbsp;&nbsp;<a
                href=""
                >200條評論</a
              >
              &nbsp;&nbsp;<span class="glyphicon glyphicon-time"></span
              >&nbsp;&nbsp;<a href="">2020年8月27日上午10點03分</a>
            </div>
          </div>
          <hr />

          <img src="http://placekitten.com/900/300" class="img-responsive" />
          <br />
          <p class="lead">一言是創建於 2016 年的專案,起初是用於個人目的</p>
          <p>
            一言是創建於 2016
            年的專案,起初是用於個人目的。目前已經轉為公益專案,由萌創團隊運營,為大家提供服務。
            所謂一言(ヒトコト),即一句話。這句話可以是傳達了感動,可以是博人一笑,可以是發人深思。總之,一言,代表著言語的觸動,靈魂的交流。
          </p>
          <p class="text-right">
            <a href="single_article.html">閱讀全文...</a>
          </p>
          <hr />
        </article>

        <article>
          <h2><a href="#">這是我的第一篇文章</a></h2>
          <div class="row">
            <div class="col-md-6 col-sm-6">
              <span class="glyphicon glyphicon-folder-open"></span
              >&nbsp;&nbsp;<a href="">標籤</a> &nbsp;&nbsp;<span
                class="glyphicon glyphicon-tags"
              ></span
              >&nbsp;&nbsp;<a href="">分類1</a>,<a href="">分類2</a>,<a
                href=""
                >分類3</a
              >
            </div>
            <div class="col-md-6 col-sm-6">
              <span class="glyphicon glyphicon-comment"></span>&nbsp;&nbsp;<a
                href=""
                >200條評論</a
              >
              &nbsp;&nbsp;<span class="glyphicon glyphicon-time"></span
              >&nbsp;&nbsp;<a href="">2020年8月27日上午10點03分</a>
            </div>
          </div>
          <hr />

          <img src="http://placekitten.com/900/300" class="img-responsive" />
          <br />
          <p class="lead">一言是創建於 2016 年的專案,起初是用於個人目的</p>
          <p>
            一言是創建於 2016
            年的專案,起初是用於個人目的。目前已經轉為公益專案,由萌創團隊運營,為大家提供服務。
            所謂一言(ヒトコト),即一句話。這句話可以是傳達了感動,可以是博人一笑,可以是發人深思。總之,一言,代表著言語的觸動,靈魂的交流。
          </p>
          <p class="text-right">
            <a href="single_article.html">閱讀全文...</a>
          </p>
          <hr />
        </article>

        <article>
          <h2><a href="#">這是我的第一篇文章</a></h2>
          <div class="row">
            <div class="col-md-6 col-sm-6">
              <span class="glyphicon glyphicon-folder-open"></span
              >&nbsp;&nbsp;<a href="">標籤</a> &nbsp;&nbsp;<span
                class="glyphicon glyphicon-tags"
              ></span
              >&nbsp;&nbsp;<a href="">分類1</a>,<a href="">分類2</a>,<a
                href=""
                >分類3</a
              >
            </div>
            <div class="col-md-6 col-sm-6">
              <span class="glyphicon glyphicon-comment"></span>&nbsp;&nbsp;<a
                href=""
                >200條評論</a
              >
              &nbsp;&nbsp;<span class="glyphicon glyphicon-time"></span
              >&nbsp;&nbsp;<a href="">2020年8月27日上午10點03分</a>
            </div>
          </div>
          <hr />

          <img src="http://placekitten.com/900/300" class="img-responsive" />
          <br />
          <p class="lead">一言是創建於 2016 年的專案,起初是用於個人目的</p>
          <p>
            一言是創建於 2016
            年的專案,起初是用於個人目的。目前已經轉為公益專案,由萌創團隊運營,為大家提供服務。
            所謂一言(ヒトコト),即一句話。這句話可以是傳達了感動,可以是博人一笑,可以是發人深思。總之,一言,代表著言語的觸動,靈魂的交流。
          </p>
          <p class="text-right">
            <a href="single_article.html">閱讀全文...</a>
          </p>
          <hr />
        </article>

        <!-- 分頁 -->
        <ul class="pager">
          <li class="previous">
            <a href="#"><span aria-hidden="true">&larr;</span> 上一頁</a>
          </li>
          <li class="next">
            <a href="#">下一頁 <span aria-hidden="true">&rarr;</span></a>
          </li>
        </ul>
      </div>
      <div class="col-md-4">
        <!-- RSS訂閱,最新文章(5),分類,標籤雲,最新評論 -->
        <div class="well text-center">
          <p class="lead">不想錯過好文章,趕緊訂閱吧</p>
          <button type="button" class="btn btn-primary btn-lg">
            訂閱我的部落格
          </button>
        </div>

        <!--最新文章 -->
        <div class="panel panel-primary" id="mypanel">
          <!-- Default panel contents -->
          <div class="panel-heading">
            <h4>最新文章</h4>
          </div>
          <!-- List group -->
          <ul class="list-group">
            <li class="list-group-item"><a href="">1. 最新文章8月27日</a></li>
            <li class="list-group-item"><a href="">2. 最新文章8月26日</a></li>
            <li class="list-group-item"><a href="">3. 最新文章8月25日</a></li>
            <li class="list-group-item"><a href="">4. 最新文章8月24日</a></li>
            <li class="list-group-item"><a href="">5. 最新文章8月23日</a></li>
          </ul>
        </div>

        <!-- 分類目錄 -->
        <div class="panel panel-primary">
          <!-- Default panel contents -->
          <div class="panel-heading">
            <h4>分類目錄</h4>
          </div>
          <!-- List group -->
          <ul class="list-group">
            <li class="list-group-item"><a href="">水果</a></li>
            <li class="list-group-item"><a href="">蔬菜</a></li>
            <li class="list-group-item"><a href="">電腦3C</a></li>
            <li class="list-group-item"><a href="">明星八卦</a></li>
            <li class="list-group-item"><a href="">政治事件</a></li>
          </ul>
        </div>

        <!-- 標籤雲 -->
        <div class="panel panel-primary">
          <!-- Default panel contents -->
          <div class="panel-heading">
            <h4>標籤雲</h4>
          </div>
          <!-- List group -->
          <div class="panel-body">
            <ul class="list-inline">
              <li><a href="">子鼠</a></li>
              <li><a href="">丑牛</a></li>
              <li><a href="">寅虎</a></li>
              <li><a href="">卯兔</a></li>
              <li><a href="">申龍</a></li>
              <li><a href="">巳蛇</a></li>
            </ul>
          </div>
        </div>

        <!-- 最新評論 -->
        <div class="panel panel-primary">
          <!-- Default panel contents -->
          <div class="panel-heading">
            <h4>最新評論</h4>
          </div>
          <!-- List group -->
          <ul class="list-group">
            <li class="list-group-item"><a href="">1. 最新文章8月27日</a></li>
            <li class="list-group-item"><a href="">2. 最新文章8月26日</a></li>
            <li class="list-group-item"><a href="">3. 最新文章8月25日</a></li>
            <li class="list-group-item"><a href="">4. 最新文章8月24日</a></li>
            <li class="list-group-item"><a href="">5. 最新文章8月23日</a></li>
          </ul>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: "Context",
  data() {
    return {};
  },
  components: {},
};
</script>

<style scoped>

</style>

新建Contact.vue檔案,把聯絡我頁面遷移

<template>
  <div class="container" id="body">
    <h1>聯絡我</h1>
    <div class="well">有問題聯絡我呀</div>
    <form>
      <div class="form-group">
        <label for="username">使用者名稱字</label>
        <input type="text" class="form-control" id="username" placeholder="名字" />
      </div>
      <div class="form-group">
        <label for="exampleInputEmail1">郵箱</label>
        <input type="email" class="form-control" id="exampleInputEmail1" placeholder="郵箱" />
      </div>
      <div class="form-group">
        <label for="subject">主題</label>
        <input type="text" class="form-control" id="subject" placeholder="主題" />
      </div>
      <div class="form-group">
        <label for="message">訊息內容</label>
        <textarea class="form-control" id="message" placeholder="評論內容..."></textarea>
      </div>
      <div class="form-group text-right">
        <button type="submit" class="btn btn-primary btn-lg">提交你的訊息</button>
      </div>
    </form>
  </div>
</template>

<script>
export default {
  name: "Contact",
  data() {
    return {};
  },
  components: {},
};
</script>

<style scoped lang='scss'>
</style>

新建About.vue頁面把關於我頁面遷移

<template>
		<div class="container" id="body">
			<h1>關於我</h1>
			<div class="row" style="margin-bottom: 10px;">
				<div class="col-md-3 col-sm-3">
					<img src="http://placekitten.com/300/350" class="img-thumbnail img-responsive">
				</div>
				<div class="col-md-9 col-sm-9">
					<p>
						任賢齊,1966年6月23日出生於臺灣省彰化縣,祖籍湖北省武漢市江夏區,中國臺灣流行樂男歌手、演員、賽車手、導演 。
					</p>
					<p>
						1990年發行音樂合輯《奔向彩虹》,以歌手身份正式出道。1991年首次出演電影《官兵捉強盜》,進入影視圈。1997年因演唱歌曲《心太軟》獲得廣泛關注 [3]  ,並憑藉該歌曲榮獲香港電臺十大勁爆國語金曲銅獎、香港新城精選104電臺國語金獎等獎項 [4]  。1998年發行專輯《愛像太平洋》,專輯中的歌曲《對面的女孩看過來》獲得HITFM臺北之音音樂網100單曲票選活動的第一名,該歌曲也成為了他在歌唱事業上的代表作品;同年出演古裝劇《神鵰俠侶》飾演楊過。
					</p>
					<p>
						1999年主演的電影《星願》上映;同年參加馬來西亞越野摩托車比賽中奪得季軍 [5]  。2000年發行專輯《為愛走天涯》 [6]  。2001年獲得亞洲越野摩托車拉力賽冠軍 [7]  。2005年主演的動作片《韓城攻略》在中國和韓國同期上映。2010年憑藉電影《火龍對決》獲得富川電影節最佳男主角。
					</p>
					<p>
						2013年出演劇情片《下午茶》,該片入圍第63屆柏林電影節“電影大觀”單元 [8]  。2014年執導的紀錄片《媽祖迺臺灣》在臺灣上映,該片打破臺灣紀錄片上映戲院數量 [1]  ;同年導演並主演愛情喜劇電影《落跑吧愛情》 [2]  。2016年出演警匪片《樹大招風》 [9]  ;同年再次迴歸小熒幕,出演飲食類電視劇《深夜食堂》 [10]  。2019年主演犯罪動作電影《沉默的證人》。
					</p>
				</div>
			</div>
			<div class="row text-center photo">
				<img  src="http://placekitten.com/200/200" >
				<img  src="http://placekitten.com/200/200" >
			</div>
			<p class="lead text-center">以下是我的視訊課資源</p>
			<div class="row">
				<div class="col-md-4">
					<div class="thumbnail">
						<a href="#">
							<img src="http://placekitten.com/300/450" class="img-responsive">
						</a>
						<div class="caption text-center">
							<h4>Python基礎</h4>
							<p>課程簡介</p>
							<button type="button" class="btn btn-primary">立即購買</button>
						</div>
					</div>
				</div>
				<div class="col-md-4">
					<div class="thumbnail">
						<a href="#">
							<img src="http://placekitten.com/300/450" class="img-responsive">
						</a>
						<div class="caption text-center">
							<h4>Django實戰開發</h4>
							<p>課程簡介</p>
							<button type="button" class="btn btn-primary">立即購買</button>
						</div>
					</div>
				</div>
				<div class="col-md-4">
					<div class="thumbnail">
						<a href="#">
							<img src="http://placekitten.com/300/450" class="img-responsive">
						</a>
						<div class="caption text-center">
							<h4>Flask實戰開發</h4>
							<p>課程簡介</p>
							<button type="button" class="btn btn-primary">立即購買</button>
						</div>
					</div>
				</div>
			</div>
		</div>
</template>

<script>

    export default {
        name: 'About',
        data() {
            return {
                
            }
        },
        components: {
            
        }
    }
</script>

<style scoped lang='scss'>
    
</style>

在src/App.vue檔案下匯入剛才寫好的元件並在components下注冊

  • 其中<router-view />是路由出口
<template>
  <div id='app'>
    <Header></Header>
    <router-view />
    <Footer></Footer>
  </div>
</template>

<script>
import Header from './components/Header';
import Footer from './components/Footer';

export default {
  name: 'App',
  components: {
    Header,
    Footer,
  }
}
</script>

<style>
#body{
    padding-top: 75px;
}
</style>

安裝vue-router實現路由切換

使用npm安裝

npm install vue-router --save-dev

在src下建立routes.js檔案

/* jshint esversion: 6 */
import VueRouter from 'vue-router';
import Vue from 'vue';
import Context from '@/components/Context';
import About from '@/components/About';
import Contact from '@/components/Contact';

Vue.use(VueRouter);

const router = new VueRouter({
    routes: [
        {
            path: '/',
            name: 'index',
            component: Context,
        },
        {
            path: '/about',
            name: 'about',
            component: About,
        },
        {
            path: '/contact',
            name: 'contact',
            component: Contact,
        },
    ]
});

export default router;

在main.js檔案中註冊寫好的路由

/* jshint esversion: 6 */
import Vue from 'vue';
import App from './App.vue';
import router from './routes';

Vue.config.productionTip = false;

new Vue({
  render: h => h(App),
  router
}).$mount('#app');

部落格用vue搭建成功!