vue組件

組價件化開發(fā)

組件

  • 組件就是一個自定義的html標(biāo)簽玉工,通過組件名作為自定義標(biāo)簽名

組件注冊

  • 全局組件
    • 全局祖冊設(shè)置在根實例注冊之前
  Vue.component('組件名',{
    /*
      選項內(nèi)容
    */
    template: '<div>這是全局祖冊的組件</div>'
  });
  
  • 選項內(nèi)容

    • template選項
      • 設(shè)置組件的結(jié)構(gòu)拼窥,最終被引入根實例或其他組件中
      • 只能有一個根元素
    • data選項 必須是一個函數(shù),return返回數(shù)據(jù)
  • 局部組件

    new Vue ({
      ...
      components: {
        'my-con':{
          template : '#tmp',
          data(){
            return {
              title : '標(biāo)題'
            }
          }
        }
      }
    })
    

組件通信

  • 組件間數(shù)據(jù)傳遞叫組件通信

  • 父組件傳遞給子組件

    • 通過子組件的props選項接收父組件的傳值
    • 父子組件間的所以props都是單向下行綁定的
    • props屬性的命名規(guī)則:
      • 建議使用camelCase 采用kebab-case進行綁定
    <html>
      <div id="app">
        <h1>我是標(biāo)題</h1>
        <my-con :title="title" :content="content"></my-con>
      </div>
    </html>
    <script>
      new Vue({
        ...
        data : {
          title: '我是標(biāo)題',
          content:'我是內(nèi)容哈哈哈'
        },
        components: {
        'my-con':{
          template : `
              <div>
                  <h2>{{title}}</h2>
                  <p>{{content}}</p>
              </div>`,
          props: ['title','content']
        }
      }
      });
    </script>
    
  • 子組件傳遞給父組件

    • 通過事件向父組件傳值
    <html>
      <div id="app">
        <product-item v-for="product in products" :title="product.title" :key="product.id" @count-change="totalCount+=$event"></product-item>
      </div>
    </html>
    
    <script>
      Vue.component('product-item',{
        props : ['title'],
        template : `
              <div>
                  <span>商品名稱:{{title}}</span>
                  <span>商品個數(shù): {{count}}</span>
                  <button @click="countIns">+1</button>
              </div>
          `,
        data(){
          return {
            count:0
          }
        },
        methods: {
          countIns(){
            this.$emit('count-change',);
            this.count++;
          }
        }
      })
      new Vue({
        el : '#app',
        data : {
          products : [
            {id:1,title:'蘋果1斤'}
          ],
          totalCount: 0
        }
      })
      
    </script>
    
  • 組件與v-model

    • v-model用于組件時嗤疯,需要通過props與自定義事件實現(xiàn)
  • 非父子組件的傳值

    • 兄弟組件的傳值
  • 其他的通信方式

    • eventBus
    • 發(fā)送數(shù)據(jù)的組件觸發(fā)bus事件,接收的組件給bus注冊對應(yīng)的事件
      • 給bus注冊對應(yīng)的事件通過$on()操作
    • $root 訪問當(dāng)前組件樹的根實例,不建議使用
    • parentchidren 用于便捷訪問父子組件 不建議使用
    • $refs 獲取設(shè)置ref屬性的html標(biāo)簽或子組件
      • 給子組件設(shè)置ref屬性亥鬓,渲染后通過$refs獲取子組件實例

組件插槽

  • 插槽 slot
  • 單個插槽
  <body>
    <div id="app">
      <com-a>
        <p>這是第一個組件的內(nèi)容</p>
      </com-a>
    </div>
  </body>
  <script>
    Vue.componet('com-a',{
      template:`
        <div>
          <h3>組件的標(biāo)題</h3>
          <slot></slot>
        </div>
      `
    })
  </script>
  • 可以在插槽中設(shè)置默認內(nèi)容,如果沒有傳入內(nèi)容默認就是顯示默認內(nèi)容
  • 具名插槽
  <body>
    <div id="app">
      <com-a>
        <p slot="header">這是第一個組件的內(nèi)容</p>
        <p slot="footer">我是腳步</p>
      </com-a>
    </div>
  </body>
  <script>
    Vue.componet('com-a',{
      template:`
        <div>
          <h3>組件的標(biāo)題</h3>
          <slot name="header"></slot>
          <slot name="footer"></slot>
        </div>
      `
    })
  </script>

內(nèi)置組件

  • 動態(tài)組件
    • 適用于多個組件頻繁切換的處理
    • component用于將一個元組件渲染為動態(tài)組件域庇,以is屬性決定渲染哪個組件
    • is屬性會每次切換組件時嵌戈,vue都會創(chuàng)建一個新的組件實例
  • keep-live組件
    • 用于保留組件狀態(tài)或避免組件重新渲染
    • include可以是數(shù)組可以是正則可以是字符串
    • exclude屬性用于指定哪些組件不會被緩存
    • max屬性用于設(shè)置最大緩存?zhèn)€數(shù)
      <body>
        <keep-live :include="/Com[ABC] /">
          <component :is="currentCom"></compontent>
        </keep-live>
      </body>
    
  • 過渡組件
    • 用于在vue插入,更新听皿,或者移除DOM時熟呛,提供多種不同方式的應(yīng)用過渡,動畫效果
    • transition組件
      • 條件渲染 v-if
      • 條件展示 v-show
      • 動態(tài)組件
      • 組件根節(jié)點
      • 進入的類名
        • v-enter
        • v-enter-to
        • v-enter-active
      • 離開的類名
        • v-leave
        • v-leave-to
        • v-leave-active
      • 設(shè)置了name的transition組件需要將v-改成name-
    • 自定義過渡類名
    • transition-group
      • 用于給列表統(tǒng)一設(shè)置過渡動畫

vue Router

  • vue router 是vue.js的官方插件尉姨,用來快速實現(xiàn)單頁應(yīng)用

單頁應(yīng)用

  • 指的是網(wǎng)站的所以功能都在的單個頁面中進行呈現(xiàn)
  • 具有代表性的有后臺管理系統(tǒng)庵朝,移動端,小程序等
  • 優(yōu)點:
    • 前后端分離,提高了開發(fā)效率
    • 業(yè)務(wù)場景切換時偿短,局部更新結(jié)構(gòu)
    • 用戶體驗好欣孤,更加接近本地應(yīng)用
  • 缺點:
    • 不利于seo
    • 初次首屏加載速度比較慢
    • 頁面復(fù)雜度比較高

前端路由

  • 前端路由指的是url與內(nèi)容間的映射關(guān)系
  • hash方式
    • 通過haskchange事件監(jiān)聽hash變化,并進行網(wǎng)頁內(nèi)容更新
    • location.hash.replace('#','');
      const router = {
        routes: {},
        route(path,callback){
          this.routes[path] = callback;
        },
        //初始化路由
        init(){
          const that = this;
          window.onhashchange = function(){
            const hash = location.hash.replace('#','');
            that.routes[hash] && this.routes[hash]();
          }
        }
      };
    
  • history方式
    • 采用的是html5提供的新功能實現(xiàn)前端路由
      const router = {
        routes: {},
        route(path,callback){
          this.routes[path] = callback;
        },
        go(path){
          history.pushState(null,null,path){
            this.routes[path] && this.routes[path]();
          }
        }
      };
    

vue router

  • 基本使用
    • 安裝
    • 提供了 router-link router-view
      • router-link 默認是a標(biāo)簽 可以通過tag設(shè)置
      • router-view顯示路由匹配到的組件
  • 命名視圖
    • 如果導(dǎo)航后昔逗,希望同時在同級展示多個視圖(組件),這時就需要進行命名視圖
    • 路由中通過components屬性進行設(shè)置不同視圖的對應(yīng)組件
  • 編程式導(dǎo)航
    • router.push()用來導(dǎo)航到一個新的url
    • router-link的to屬性使用綁定方式也可屬性對象結(jié)構(gòu)
    • 導(dǎo)航守衛(wèi)
      router.beforeEach((to,from,next)=>{
        console.log(to,from);
        next();
      })
    

vue-cli

  • 創(chuàng)建項目 vue create project-demo
  • 啟動項目 npm run serve
  • 目錄與文件
    • public 預(yù)覽文件目錄
    • src
      • assets 靜態(tài)資源目錄
      • components 項目組件目錄
      • App.vue 根目錄
      • main.js 入口文件
  • 打包與部署
    • 打包
      • npm run build 打包
    • 部署
      • npm i -g serve 靜態(tài)文件服務(wù)器
      • 在dist下通過serve直接開啟一個服務(wù)器
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末降传,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子勾怒,更是在濱河造成了極大的恐慌婆排,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笔链,死亡現(xiàn)場離奇詭異段只,居然都是意外死亡,警方通過查閱死者的電腦和手機鉴扫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門赞枕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坪创,你說我怎么就攤上這事炕婶。” “怎么了莱预?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵柠掂,是天一觀的道長。 經(jīng)常有香客問我依沮,道長涯贞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任危喉,我火速辦了婚禮宋渔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘姥饰。我一直安慰自己傻谁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布列粪。 她就那樣靜靜地躺著审磁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪岂座。 梳的紋絲不亂的頭發(fā)上态蒂,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音费什,去河邊找鬼钾恢。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瘩蚪。 我是一名探鬼主播泉懦,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼疹瘦!你這毒婦竟也來了崩哩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤言沐,失蹤者是張志新(化名)和其女友劉穎邓嘹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體险胰,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡汹押,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了起便。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棚贾。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖榆综,靈堂內(nèi)的尸體忽然破棺而出鸟悴,到底是詐尸還是另有隱情,我是刑警寧澤奖年,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站沛贪,受9級特大地震影響陋守,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜利赋,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一水评、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧媚送,春花似錦中燥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吟秩,卻和暖如春咱扣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涵防。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工闹伪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓偏瓤,卻偏偏與公主長得像杀怠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子厅克,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

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

  • 三赔退、組件 組件 (Component) 是 Vue.js 最強大的功能之一。組件可以擴展 HTML元素已骇,封裝可重用...
    小山居閱讀 612評論 0 1
  • 前言 本文主要介紹屬性离钝、事件和插槽這三個vue基礎(chǔ)概念、使用方法及其容易被忽略的一些重要細節(jié)褪储。如果你閱讀別人寫的組...
    IT小鮑閱讀 464評論 0 0
  • Vue父組件向子組件傳遞數(shù)據(jù) 這里子組件里的:init-count指的是props中的initCount卵渴,其對應(yīng)的...
    wa7ch閱讀 405評論 0 1
  • 生命周期的鉤子函數(shù)(11,8,2,1) 生命周期的創(chuàng)建:生命周期的執(zhí)行速度要快于網(wǎng)絡(luò)請求1,創(chuàng)建:創(chuàng)建前:befo...
    前端小碼農(nóng)呀閱讀 1,194評論 0 0
  • 一鲤竹、什么是懶加載 懶加載也叫延遲加載浪读,即在需要的時候進行加載,隨用隨載辛藻。 二碘橘、為什么需要懶加載 在單頁...
    菲菲菲菲妞閱讀 22,011評論 0 10