不一樣的 vue 實戰(zhàn) (3): 布局與組件

首先

首先:講一句抱歉,周末俗事纏身,無力更博驮宴,只有今日發(fā)了。而且寫博挺消耗精力的狸涌,你別看短短了幾千字烘跺,需要反復(fù)的斟酌项玛,反復(fù)的修改妙色,如果有錯誤與不足的地方拌夏,請評論指正推穷,謝謝!

前言

本文是結(jié)合官方的 api文檔,進行漸進式學(xué)習(xí),在實戰(zhàn)中熟悉文檔,在文檔中理解實戰(zhàn)类咧。下面的代碼中有詳細(xì)的代碼注釋馒铃,和邏輯講解,請仔細(xì)閱讀。

3.1.1 什么是vue?

如果你還不知道什么Vue是干什么的痕惋,請參見什么是vue区宇。

3.1.2 項目結(jié)構(gòu)

參考以下的目錄結(jié)構(gòu),新建文件夾值戳,下面打‘ * ’的為新建文件夾
<pre>
├── build // 構(gòu)建服務(wù)和webpack配置
├── config // 項目不同環(huán)境的配置
├── dist // 項目build目錄
├── index.html // 項目入口文件
├── package.json // 項目配置文件
├── src // 生產(chǎn)目錄
│ ├── assets // 圖片資源
│ ├── common * // 公共的css js 資源
│ ├── components // 各種組件
│ ├── moke * // 本地靜態(tài)數(shù)據(jù)管理文件
│ ├── App.vue // 主頁面
│ ├── vuex * // vuex狀態(tài)管理器
│ ├── router // 路由配置器
│ └── main.js // Webpack 預(yù)編譯入口

</pre>

3.1.3 Vue 實例

新增知識點

步驟

打開 /src/main.js 你會看到

import Vue from 'vue'   //引入vue模塊
import App from './App'  //引入vue組件
import router from './router' // 引入路由配置文件

Vue.config.productionTip = false // 關(guān)閉生產(chǎn)模式下給出的提示

new Vue({  // 創(chuàng)建一個 Vue 的根實例
  el: '#app', //掛載id,這個實例下所有的內(nèi)容都會在index.html 一個id為app的div下顯示
  router, // 注入路由配置议谷。
  template: '<App/>', //配置根模板 即打開頁面顯示那個組件
  components: { App } // 注入組件
})

3.1.4 Style

第一步 安裝less

在終端上輸入

npm install --save-dev less-loader style-loader less 

第二步 配置less

/build/webpack.base.conf.js 加上

module.exports = {
  module: {
    rules: [
      {   //把這個對象添加在里面
        test: /\.less$/,
        use: [
          'style-loader',
          { loader: 'css-loader', options: { importLoaders: 1 } },
          'less-loader'
        ]
      }
    ]
  }
}

第三步 下載style文件

因為本課程主要是針對Vue的實戰(zhàn),所以在這里不去講解less的用法堕虹,如果感興趣可以去less教程學(xué)習(xí)卧晓,也不會講每個樣式怎么寫,請下載Style文件,到 src/common/下。

3.1.5 ‘.vue’文件

  • Vue自定義了一種后綴名名字為.vue文件,它將html, js, css 整合成一個文件,和里面 template script style三個區(qū)別分別依次對應(yīng)赴捞。
<template>
<!--這里寫 html -->
<template/>
<script>
 export default {};
 // 這里寫js
</script>
<style lang = "less" scoped>
 <!--這里寫css-->
</style>
  • 一個.vue 文件就等于單獨組件逼裆。因為.vue文件是自定義的,瀏覽器不識別赦政,所以要對該文件進行解析,在webpack構(gòu)建中胜宇,需要安裝vue-loader 對.vue文件進行解析。
  • template里面最外層必須是只有一個容器
  • script 中的 ** export default {}** 即導(dǎo)出這個組件恢着,外部可以引用桐愉。
  • style 中的 lang 指額外表示支持的語言可以讓編輯器識別,scoped 指這里寫的css只適用于該組件。

3.1.6 新增layouts.vue(布局組件)

在學(xué)習(xí)了上一小節(jié),我們知道了 .vue文件是做什么用掰派,下面我們就嘗試一下从诲。

src/components/目錄下新建一個文件 layouts.vue,并且復(fù)制以下代碼。

<template>
  <section class="container" > <!--最外層容器-->
    <section class="menu"> <!--左邊的容器-->
    </section>
    <section class="content-container"><!--右邊的容器-->
    </section>
  </section>
</template>
<script>
  export  default {};
</script>

<style lang="less">
@import '../common/style/layouts.less';
</style>

3.1.7 修改router(路由)

vue-router有什么用?

它的作用在于路由設(shè)置碗淌,用于設(shè)置頁面跳轉(zhuǎn)時的路徑設(shè)置,它的工作原理也很簡,將組件(components)映射到路由(routes)盏求,然后告訴 vue-router 在哪里渲染它們抖锥。

新增知識點(必看):

第一步:

打開 src/router/index.js 文件
復(fù)制以下代碼,替換老的代碼。

import Vue from 'vue' // 導(dǎo)入Vue
import Router from 'vue-router' // 導(dǎo)入vue-router 庫
import Layouts from '@/components/layouts' // 導(dǎo)入layouts.vue 組件

Vue.use(Router) //全局注冊Router組件碎罚,它會綁定到Vue實例里面磅废。

export default new Router({ // 創(chuàng)建 router 實例,然后傳 `routes` 配置
  routes: [
    {
      path: '/',  //訪問路徑
      name: 'Layouts', // 路徑名
      component: Layouts //訪問的組件,即訪問‘/’,它會加載 Layouts 組件所有的內(nèi)容荆烈。
    }
  ]
})

第二步:

瀏覽器打開 http://localhost:8080/ 你將看到如下的顯示拯勉,那么這一步你就完成了。

3.1.8 menu.vue(菜單組件)

新增知識點(必讀)

第一步:

src/components/目錄下新建一個文件 menu.vue,并且復(fù)制以下代碼

<template>
  <div class="list-todos">  <!--菜單容器-->
      <a class="list-todo activeListClass list" > <!--單個菜單容器-->
        <span class="icon-lock" ></span>  <!--鎖的圖標(biāo)-->
        <span class="count-list">1</span><!--數(shù)字-->
        星期一 <!--菜單內(nèi)容-->
      </a>
    <a class=" link-list-new" > <!--新增菜單-->
      <span class="icon-plus">
      </span>
      新增
    </a>
  </div>
</template>
<script>
  export default {};
</script>

<style lang="less">
@import '../common/style/menu.less';
</style>

第二步:

我們在回到 Layouts.vue,并且新增以下打*代碼憔购。

<template>
    <section class="menu"> <!--左邊的容器 里面加上組件 menus-->
     <menus></menus> <!-- * -->
    </section>
</template>

<script>
  import menus from './menus'; // * 導(dǎo)入剛才我們創(chuàng)建的 menus組件
  export  default {
    components: { // * 注冊menus組件宫峦,讓其可以在template調(diào)用
      menus
    }
  };
</script>

最后我們的 menu組件就注冊成功啦,并且引用了它玫鸟,你做的怎么樣了呢导绷?

3.1.9列表渲染

新增知識點(必讀)

第一步:

回到 src/components/menu.vue,新增以下代碼屎飘。

<template>
   <a class="list-todo list activeListClass" v-for="item in items"> <!-- v-for 列表渲染-->
     <span class="icon-lock" v-if="item.locked"></span> <!-- v-if 條件渲染-->
     <span class="count-list" v-if="item.count > 
     0">{{item.count}}</span>
     {{item.title}}   <!-- 數(shù)據(jù)綁定妥曲,看模板語法-->
   </a>
</template>
<script>
export default {
 data() { //data函數(shù)
   return {
     items: [{ title: '星期一', count: 1, locked: true }, //菜單的模擬數(shù)據(jù)
       { title: '星期二', count: 2, locked: true }, {
       title: '星期三', count: 3, locked: false
     }]
   };
 }
};
</script>

完成后你將會看到以下內(nèi)容。

現(xiàn)在整個頁面我們已經(jīng)左邊的菜單部分钦购,下面就是完成右邊的詳情部分檐盟。

3.1.10 todo.vue (待辦事項詳情組件)

新增知識點(必讀)

第一步:

src/components/ 目錄下新建一個文件 todo.vue,復(fù)制以下代碼。

<template>
 <div class="page lists-show"><!--最外層容器-->
   <nav><!--容器上半部分-->
     <div class="nav-group"> <!--移動端的菜單圖標(biāo)-->
       <a class="nav-item">
         <span class="icon-list-unordered">
         </span>
       </a>
     </div>
     <h1 class="title-page">
       <span class="title-wrapper">{{todo.title}}</span> <!-- 標(biāo)題-->
       <span class="count-list">{{todo.count}}</span><!-- 數(shù)目-->
     </h1>
     <div class="nav-group right"><!-- 右邊的刪除押桃,鎖定圖標(biāo)容器-->
       <div class="options-web"> 
         <a class=" nav-item"> <!-- 鎖定圖標(biāo)-->
           <span class="icon-lock" v-if="todo.locked"></span>
           <span class="icon-unlock" v-else>
           </span>
         </a>
         <a class=" nav-item"><!-- 刪除圖標(biāo)-->
           <span class="icon-trash">
           </span>
         </a>
       </div>
     </div>
 
     <div class=" form todo-new input-symbol"> <!-- 新增單個代辦單項輸入框,監(jiān)聽了回車事件葵萎,雙向綁定text值,監(jiān)聽了disabled屬性,在todo.locked為true的情況下無法編輯-->
        <input type="text" v-model="text" placeholder='請輸入'@keyup.enter="onAdd" :disabled="todo.locked" />
       <span class="icon-add"></span>
     </div>
   </nav>
   <div class="content-scrollable list-items">
     <!--容器下半部分-->
   </div>
 </div>
</template>
<script>
export default {
 data() {
   return {
     todo: { //詳情內(nèi)容
       title: '星期一',
       count: 12,
       locked: false
     },
     items: [ //代辦單項列表
       { checked: false, text: '新的一天', isDelete: false },
       { checked: false, text: '新的一天', isDelete: false },
       { checked: false, text: '新的一天', isDelete: false }
     ],
     text: '' //新增代辦單項綁定的值
   }
 },
 methods: {
   onAdd() {
     this.items.push({
       checked: false, text: this.text, isDelete: false
     }); // 當(dāng)用戶點擊回車時候 唱凯,給items的值新增一個對象羡忘,this.text 即輸入框綁定的值
     this.text = ''; //初始化輸入框的值。
   }
 }
}
</script>
<style lang = "less">
@import '../common/style/nav.less';
@import '../common/style/form.less';
@import '../common/style/todo.less';
</style>

第二步

打開 src/components/layouts.vue文件
新加入以下代碼波丰。

<template>
   <section class="content-container"><!--右邊的容器-->
   <todo></todo>
   </section>
</template>
 <script>
  import todo from './todo';
 export  default {
   components: {
     todo  //新加的
   }
 };
</script>

最后:

3.1.11 item.vue(代辦單項組件)

新增知識點

第一步:

src/components/ 目錄下新建一個文件 item.vue,復(fù)制以下代碼壳坪。

<template>
  <div class="list-item editingClass editing"> <!-- 最外層容器-->
    <label class="checkbox"> <!--自定義的多選框-->
      <input type="checkbox" v-model="item.checked"> <!--item.checked-->
      <span class="checkbox-custom"></span>
    </label>
    <input type="text" v-model="item.text" placeholder='寫點什么。掰烟。爽蝴。'>  <!--綁定item.text-->
    <a class="delete-item"> <!--刪除圖標(biāo)-->
      <span class="icon-trash"></span>
    </a>
  </div>
</template>
<script>
export default {
  props: ['item']  //子組件顯式的用 props 選項聲明它期待獲得的數(shù)據(jù),
  這里申明 它想要一個叫做 ’item‘的數(shù)據(jù)纫骑。
};
</script>
<style lang="less">
@import '../common/style/list-items.less';
</style>

第二步:

打開 src/components/todo.vue文件
新加入以下代碼

<template>
   <div class="content-scrollable list-items">
      <div v-for="item in items"> <!-- 這里`v-for`會循環(huán)我們在 `data`函數(shù) 事先定義好的 ’items‘模擬數(shù)據(jù)蝎亚,循環(huán)后拿到單個對象,在通過prop把數(shù)據(jù)傳輸給子組件 item -->
       <item :item="item"></item>
     </div>
   </div>
</template>
 <script>
import item from './item';
 export  default {
   components: {  //新加components對象
     item  //新加的
   }
 };
</script>

最后

在新增的輸入框里面先馆,輸入點東西发框,并且回車,看看有沒有達到效果煤墙。


小結(jié)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铣减,一起剝皮案震驚了整個濱河市她君,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌葫哗,老刑警劉巖缔刹,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異劣针,居然都是意外死亡校镐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門捺典,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸟廓,“玉大人,你說我怎么就攤上這事襟己「蜗洌” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵稀蟋,是天一觀的道長。 經(jīng)常有香客問我呐赡,道長退客,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任链嘀,我火速辦了婚禮萌狂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怀泊。我一直安慰自己茫藏,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布霹琼。 她就那樣靜靜地躺著务傲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枣申。 梳的紋絲不亂的頭發(fā)上售葡,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音忠藤,去河邊找鬼挟伙。 笑死,一個胖子當(dāng)著我的面吹牛模孩,可吹牛的內(nèi)容都是我干的尖阔。 我是一名探鬼主播贮缅,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼介却!你這毒婦竟也來了谴供?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤筷笨,失蹤者是張志新(化名)和其女友劉穎憔鬼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胃夏,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡轴或,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了仰禀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片照雁。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖答恶,靈堂內(nèi)的尸體忽然破棺而出饺蚊,到底是詐尸還是另有隱情,我是刑警寧澤悬嗓,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布污呼,位于F島的核電站,受9級特大地震影響包竹,放射性物質(zhì)發(fā)生泄漏燕酷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一周瞎、第九天 我趴在偏房一處隱蔽的房頂上張望苗缩。 院中可真熱鬧,春花似錦声诸、人聲如沸酱讶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泻肯。三九已至,卻和暖如春慰照,著一層夾襖步出監(jiān)牢的瞬間软免,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工焚挠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留膏萧,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像榛泛,于是被迫代替她去往敵國和親蝌蹂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容