Vue 2.0 起步(2) 組件及 vue-router實例 - 微信公眾號RSS

參考:
Vue 2.0 起步(1) 腳手架工具 vue-cli + Webstorm 2016 + webpack
vue-router官方文檔
如果你是克隆git里源碼的佳谦,注意工程目錄名是vue-tutorial/,步驟:http://www.reibang.com/p/b3c76962e3d4
Github: https://github.com/kevinqqnj/vue-tutorial
請使用新的template: https://github.com/kevinqqnj/flask-template-advanced

什么是組件?

下面引自官網:
組件(Component)是 Vue.js 最強大的功能之一。組件可以擴展 HTML 元素寞秃,封裝可重用的代碼宙帝。它提供了一種抽象斯嚎,讓我們可以用獨立可復用的小組件來構建大型應用饭尝。如果我們考慮到這點肯腕,幾乎任意類型的應用的界面都可以抽象為一個組件樹:

components.png

目標:搭架一個SPA應用 - “簡讀 - 微信公眾號RSS”

公眾號平常是在微信里閱讀,經常會給微信消息打斷钥平,所以希望有一個不被打擾乎芳,能個人定制的安靜閱讀環(huán)境。

最終完成是這樣子的:


簡讀Vue2.PNG

開發(fā)步驟:

  1. 劃分功能區(qū)域 (本篇)
  2. 對應每個區(qū)域帖池,創(chuàng)建相應的組件(component) (本篇)
  3. vue-router 管理各個組件的動態(tài)加載 (本篇)
  4. 管理數(shù)據(jù)流vuex和LocalStorage 起步(3)
  5. 與后臺服務器端(Flask)的交互 - 用戶注冊及登錄 起步(4)
  6. 與后臺服務器端(Flask)的交互 - 數(shù)據(jù)持久化 起步(5)

UI選擇

一個吸引人的應用奈惑,漂亮的UI是必須滴。

  • 桌面應用睡汹,適合入門的是 Bootstrap肴甸,最新是 4.0Alpha
  • 手機端應用,推薦 Material UI對應于 Vue2.0的 Muse-UI囚巴,或element原在。
# 安裝
cnpm install bootstrap@4.0.0-alpha.5 -S
cnpm install font-awesome -S

1. 劃分功能區(qū)域

頂部是導航條【1】 -- NavBar
右側是狀態(tài)欄【2】 -- SideBar
左側是內容展示【3】 -- Content (由路由決定)

vue2-2.PNG

如果安裝了 vue-devtools,會在Chrome里清晰地顯示各個組件的關系彤叉。

現(xiàn)在庶柿,我們在 App.vue里定義整體框架:里面包含 Navbar, Sidebar和一個動態(tài)路由View。
<router-view></router-view> 看不懂沒關系秽浇,下面 vue-router馬上講到「÷現(xiàn)在你可以把這一行認為是一個組件 <home></home>。

/src/App.vue

<template>
  <div id="app">
    <div class="container">
      <nav class="navbar navbar-dark bg-inverse navbar-fixed-top">
        <router-link to="/" class="navbar-brand text-success"> 簡讀</router-link>
        <ul class="nav navbar-nav">
          <li class="nav-item">
            <router-link to="/home" class="nav-link"><i class="fa fa-home"></i> Home</router-link>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#"><i class="fa fa-flag"></i> Hot</a>
          </li>
        </ul>
        <form class="form-inline float-xs-right">
          <input class="form-control" type="text" placeholder="搜索公眾號/文章">
          <router-link to="/search"><i class="fa fa-search btn btn-outline-success" @click=""></i></router-link>
          <i class="fa fa-user-o btn btn-outline-success"></i>
        </form>
      </nav>
    </div>
    <div class="container" style="margin-top: 80px">
      <div class="row">
        <div class="col-xs-12 col-md-3 push-md-9 col-xl-3 push-xl-9">
          <sidebar></sidebar>
        </div>
        <div class="col-xs-12 col-md-9 pull-md-3 col-xl-9 pull-xl-3">
          <router-view></router-view>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
    import Siderbar from './components/Sidebar.vue'

    export default {
        components: {
            'sidebar': Siderbar
        }
    }
</script>

2. 創(chuàng)建組件

整體框架搭好了柬焕,我們現(xiàn)在來創(chuàng)建組件:
【1 - NavBar】不需要單獨組件审残,已經直接寫入 App.vue。
【2 - SideBar】需要創(chuàng)建組件斑举,而且是一直固定顯示的搅轿,所以,我們已經在 App.vue里引用了這個組件富玷。(下面寫成Siderbar了璧坟,多了個“r”,謝謝xmisspuff赎懦,已改)

/src/components/Sidebar.vue

<template>
    <div class="card">
        <div class="card-header" align="center">
            <img src="http://avatar.csdn.net/1/E/E/1_kevin_qq.jpg"
                 class="avatar img-circle img-responsive" />
            <p><strong> 非夢</strong></p>
            <p class="card-title">1天前 閱讀</p>
        </div>
        <div class="card-block">
            <p>
                <img src="http://wx.qlogo.cn/mmhead/Q3auHgzwzM6FDWDyWSNm2AFBwFV6SFMXa20hjbFlWOyGYFQqrryIPw/0"
                     class="mpavatar img-circle img-responsive" />
                <span class="tag tag-danger tag-pill float-xs-right">12</span>
                創(chuàng)意科技生活
            </p>
            <p>
                <img src="http://wx.qlogo.cn/mmhead/Q3auHgzwzM5VP8rbv4fBibDLRoibcezeC7aMx2qs4hfUWtw8Cp6PDZ7Q/0"
                     class="mpavatar img-circle img-responsive" />
                <span class="tag tag-danger tag-pill float-xs-right">3</span>
                科技每日推送
            </p>
        </div>
    </div>
</template>

<style>
    .avatar {
        height: 75px;
        margin: 0 auto;
        margin-top: 10px;
        margin-bottom: 10px;
    }
    .mpavatar {
        height: 30px;
        margin: 0 auto;
        margin-top: 2px;
        margin-bottom: 2px;
    }
    .img-circle {
        border-radius: 50%;
    }
</style>

【3 - Content】 是變化的雀鹃,我們希望打開首頁時,左邊顯示主頁(Home)铲敛,這是一個新組件:

/src/components/Home.vue

<template>
  <div>
    <div class="jumbotron">
      <h1 class="display-3 text-success">簡 讀</h1>
      <p class="lead">微信公眾號簡單閱讀器 RSS</p>
      <hr class="my-2">
      <p>公眾號平常是在微信里閱讀褐澎,經常會給微信消息打斷。這里是一個不被打擾伐蒋、能個人定制的安靜閱讀環(huán)境工三。</p>
      <p class="lead">
        <a class="btn btn-outline-success btn-lg" href="#" role="button">Learn more</a>
      </p>
    </div>

  </div>
</template>

3. vue-router管理各個組件的動態(tài)加載

路由在 main.js里定義。vue-router負責管理:路由變化時先鱼,框架內哪一塊來動態(tài)展某個組件俭正。

進一步了解 vue-router,請查看 vue-router官方文檔

我們的規(guī)劃:

  • 路由 / & /home --> 左邊頁面顯示歡迎 Home.vue
  • 路由 /login --> 左邊頁面顯示登錄 Login.vue
  • 路由 /mp_list --> 左邊頁面顯示所有關注公眾號清單 MpList.vue
  • 路由 /mp_history --> 左邊頁面顯示某個公眾號歷史 MpHistory.vue
  • 路由 /search --> 左邊頁面顯示搜索結果 Search.vue

下面焙畔,我們來添加 Home和 Search組件的路由掸读,它們都會由 vue-router在 App.vue中動態(tài)加載到左邊:

/src/main.js

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

import App from './App'
import 'bootstrap/dist/css/bootstrap.css'
import 'font-awesome/css/font-awesome.css'
import Home from './components/Home'
import Search from './components/Search'

Vue.use(VueRouter)

const routes = [{
    path: '/',
    component: Home
},{
    path: '/home',
    component: Home
},{
    path: '/search',
    component: Search
}]
const router = new VueRouter( {
    routes
})

new Vue({
    router,
    ...App
}).$mount('#app')

Search組件,點擊搜索按鈕,這個組件會被動態(tài)掛載到左邊(原來Home組件位置):

/src/components/Search.vue

<template>
    <div class="card">
        <div class="card-header" align="center">
            <form class="form-inline">
                <input class="form-control form-control-lg wide" type="text" placeholder="搜索公眾號/文章">
                <i class="fa fa-search btn btn-lg btn-outline-success" @click=""></i>
            </form>
        </div>
        <div class="card-block">
            <div class="media">
                <div class="media-left imgbox">
                    <a class="" href="#">
                        <img class="media-object rounded"
                             src="http://dl.bizhi.sogou.com/images/2014/04/22/587880.jpg">
                    </a></div>
                <div class="media-body">

                    <h4>這個導演的新片儿惫,每一部我必二刷</h4>
                    <p class="text-muted" style="margin-bottom: 0px;">
                        11月的時候澡罚,魚叔采訪了自己的偶像——蒂姆·波頓。并有機會提前看到了他的新片肾请,然后寫了一篇推文留搔。今天電影上映,魚叔去電影院二刷铛铁。這一次隔显,又
                    </p>
                    <p><small class="text-muted s1">
                        <span>    <i class="fa fa-star-o fa-lg float-xs-right text-danger"></i></span>
                        <i class="fa fa-eye"></i> 2348 </small>
                        <small class="text-muted">  獨立魚電影</small>
                        <small class="text-muted s2"> 1小時前</small>
                    </p>
                </div>
            </div>
            <div class="media">
                <div class="media-left imgbox">
                    <a class="" href="#">
                        <img class="media-object rounded "
                             src="http://wx.qlogo.cn/mmhead/Q3auHgzwzM6FDWDyWSNm2AFBwFV6SFMXa20hjbFlWOyGYFQqrryIPw/0">
                    </a></div>
                <div class="media-body">

                    <h4>現(xiàn)在的段子,不動腦子根本就看不懂</h4>
                    <p class="text-muted" style="margin-bottom: 0px;">
                        周末饵逐,姑媽讓我?guī)兔Ρ碚疹?歲的表弟括眠,晚上我給他洗澡的時候,女票打來電話倍权。因為手不方便拿掷豺,就開了免提,她問:在做什么呢账锹?我說...
                    </p>
                    <p><small class="text-muted s1">
                        <span>    <i class="fa fa-star-o fa-lg float-xs-right text-danger"></i></span>
                        <i class="fa fa-eye"></i> 1181 </small>
                        <small class="text-muted s1"> 鳳凰網 </small>
                        <small class="text-muted s2"> 3小時前</small>
                    </p>
                </div>
            </div>
        </div>
    </div>
</template>

<style>
    .form-inline .wide {
        width: 80%;
    }
    .imgbox {
        width: 100px;
        height: 120px;
        overflow: hidden;
    }
    .imgbox img{
        max-width: 100px;
        /*max-height: 120px;*/
    }
    .s1 {
        margin-right: 20px;
    }
    .s2 {
        margin-left: 20px;
    }
</style>

現(xiàn)在試一下萌业,是不是已經看到漂亮的主頁了?再點一下右上角搜索按鈕奸柬,搜索結果頁面也會顯示了生年,注意觀察瀏覽器地址的變化:

search.vue.PNG

目前,我們的應用里廓奕,還只是一些假數(shù)據(jù)抱婉。

下一篇,我們會討論如何采集和管理數(shù)據(jù)

Vue 2.0 起步(3) 管理數(shù)據(jù)流 vuex和LocalStorage實例

參考:Vue 2.0 構建單頁應用最佳實戰(zhàn)桌粉,感謝原作者

http://www.reibang.com/p/ab778fde3b99

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蒸绩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子铃肯,更是在濱河造成了極大的恐慌患亿,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件押逼,死亡現(xiàn)場離奇詭異步藕,居然都是意外死亡,警方通過查閱死者的電腦和手機挑格,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門咙冗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人漂彤,你說我怎么就攤上這事雾消≡植” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵立润,是天一觀的道長狂窑。 經常有香客問我,道長范删,這世上最難降的妖魔是什么蕾域? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮到旦,結果婚禮上,老公的妹妹穿的比我還像新娘巨缘。我一直安慰自己添忘,他們只是感情好,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布若锁。 她就那樣靜靜地躺著搁骑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪又固。 梳的紋絲不亂的頭發(fā)上仲器,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音仰冠,去河邊找鬼乏冀。 笑死,一個胖子當著我的面吹牛洋只,可吹牛的內容都是我干的辆沦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼识虚,長吁一口氣:“原來是場噩夢啊……” “哼肢扯!你這毒婦竟也來了?” 一聲冷哼從身側響起担锤,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤蔚晨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肛循,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铭腕,經...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年育拨,在試婚紗的時候發(fā)現(xiàn)自己被綠了谨履。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡熬丧,死狀恐怖笋粟,靈堂內的尸體忽然破棺而出怀挠,到底是詐尸還是另有隱情,我是刑警寧澤害捕,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布绿淋,位于F島的核電站,受9級特大地震影響尝盼,放射性物質發(fā)生泄漏吞滞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一盾沫、第九天 我趴在偏房一處隱蔽的房頂上張望裁赠。 院中可真熱鬧,春花似錦赴精、人聲如沸佩捞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽一忱。三九已至,卻和暖如春谭确,著一層夾襖步出監(jiān)牢的瞬間帘营,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工逐哈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芬迄,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓鞠眉,卻偏偏與公主長得像薯鼠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子械蹋,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內容