Vue內置組件[回顧]

来源:https://www.cnblogs.com/Trojan00/archive/2019/08/06/11310633.html
-Advertisement-
Play Games

1.動態組件 在某些場景,往往需要我們動態切換頁面部分區域的視圖,這個時候內置組件component就顯得尤為重要。 component接收一個名為is的屬性,is的值應為父組件中註冊過的組件的名稱,用法如下: 示例如下: Example.vue: 效果: 預設顯示: 當我們點擊About標簽時: ...


1.動態組件

 在某些場景,往往需要我們動態切換頁面部分區域的視圖,這個時候內置組件component就顯得尤為重要。

 component接收一個名為is的屬性,is的值應為父組件中註冊過的組件的名稱,用法如下:

1  <component :is="view"></component>

 示例如下:

Example.vue:

 1 <template>
 2   <div id="app">
 3     <ul class="tabs">
 4       <li class="per-tab" @click="toggleView('Home')">Home</li>
 5       <li class="per-tab" @click="toggleView('About')">About</li>
 6     </ul>
 7     <div class="tab-content">
 8       <component :is="view"></component>
 9     </div>
10   </div>
11 </template>
12 
13 <script>
14   let Home = {      //Home組件
15     template: '<p style="color: #787878;">Hello Home!</p>'
16   }
17   let About = {     //About組件
18     template: '<p>Hello About!</p>'
19   }
20   export default {
21     name: '#app',
22     components: {Home, About}, //組件註冊
23     data() {
24       return {
25         view: 'Home'
26       }
27     },
28     methods: {
29       toggleView(view) {
30         this.view = view
31       }
32     }
33   }
34 </script>
35 
36 <style scoped>
37   .tabs{
38     margin: 0;
39     padding: 0;
40     list-style: none;
41   }
42   .per-tab {
43     display: inline-block;
44     width: 120px;
45     line-height: 32px;
46     border-left: 1px solid #ccc;
47     border-top: 1px solid #ccc;
48     background-color: azure;
49   }
50   .per-tab:last-child {
51     border-right: 1px solid #ccc;
52   }
53   .tab-content {
54     background-color: aqua;
55     height: 240px;
56     border: 1px solid #ccc;
57   }
58 </style>

效果:

預設顯示:                                                  當我們點擊About標簽時:

         

2.插槽:

示例:

 1 <template>
 2   <slot-test>
 3     <p>使用插槽分發內容</p>
 4     <h1 slot="header">插槽測試!</h1>
 5     <p>在組件中,沒有指定插槽名稱的元素將被置於預設插槽中</p>
 6     <p slot="none">指定到不存在的插槽中的內容將不會被顯示</p>
 7   </slot-test>
 8 </template>
 9 
10 <script>
11   let SlotTest = {
12     template: '<div>' +
13       '<slot name="header">相當於占位元素,因此這些文字也不會被渲染</slot>' + // 具名插槽
14       '<slot></slot>' + // 預設插槽
15       '</div>'
16   }
17   export default {
18     name: '',
19     components: {SlotTest}
20   }
21 </script>
22 
23 <style scoped>
24 
25 </style>

我們看到由於3和5行沒有指定name,所以插槽會使用麽人插槽,也就是14行;而如果有name屬性但是插槽

中沒有與此相匹配的,那將會不顯示,如第6行。

所以輸出的結果就是:

 

3.組件的緩衝:

keep-alive是一個抽象組件,及他既不渲染任何DOM元素,也不會出現在組件結構樹中。我們可以使用他緩存

一些非動態的組件實例(沒有或不需要數據變化),以保留組件狀態或減少重新渲染的開銷。

keep-alive應出現在組件被移除之後需要再次掛在的地方,比如使用動態組件時:

 

1       <keep-alive>
2         <component :is="view"></component>
3       </keep-alive>

 

或者使用v-if時:

1     <keep-alive>
2       <one v-if="isOne"></one>
3       <two v-else></two>
4     </keep-alive>

4.過渡效果:

(1)單節點過渡:

         Vue提供了標簽為transition的內置組件,在下列情形中,我們可以給任何元素和組件添加進入/離開時的

         過渡動畫:

              ①元素或組件初始渲染時;

              ②元素或組件顯示/隱藏時(使用v-if或v-show進行條件渲染時)

              ③元素或組件切換時

       Vue允許用戶使用CSS和JS兩種方式來定義過渡動畫。

       在使用CSS過渡時,我們需要預置符合Vue規則的帶樣式的類名,這些類名用於定義過渡不同階段時的樣式:

              ①v-enter:定義進入過渡的開始狀態。在元素被插入前生效,被插入後的下一幀移除;

              ②v-enter-active:定義進入過渡生效時的狀態。在整個進入過渡階段中應用,在元素被插入之前生效,

                                        在過渡/動畫完成之後移除。這個類可以用來定義進入過渡的過程時間、延遲的曲線函

                                        數等;

              ③v-enter-to:(Vue 2.1.8 及以上版本)定義進入過渡結束時的狀態。在元素被插入後的下一幀(此時

                                   v-enter被移除),在過渡/動畫完成之後移除;

              ④v-leave:定義離開過渡的開始狀態。在離開過渡被觸發時立刻生效,下一陣被移除;

              ⑤v-leave-active:丁一離開過渡生效時的狀態。在整個離開過度的階段中應用,在離開過渡被觸發時立

                                        刻生效,在過渡/動畫完成之後移除。這個類可以被用來定義離開過度的過程時間、延遲

                                        和曲線函數。

             ⑥v-leave-to:(Vue 2.1.8 版及以上版本)定義來開過度的結束狀態。在離開過度被觸發之後的下一幀生

                                 效(此時v-leave被移除),在過渡/動畫完成之後移除。

       註:當失利中存在多個不同的動畫效果時,我們可以使用自定義首碼替換v-,比如使用slide-enter替換v-enter

             ,不過這需要賦予transition元素name屬性

      到此為止,這六個定義是不是聽起來很令人摸不到頭腦呀?下麵給大家個圖,助你理解:

      

 

       下麵讓我們看一個示例:

 1 <template>
 2   <div id="app">
 3     <button @click="isHidden = !isHidden">
 4       {{ isHidden ? '顯示' : '隱藏' }}
 5     </button>
 6     <!-- 預設首碼的過渡 -->
 7     <transition>
 8       <p v-if="!isHidden">使用預設首碼的過渡</p>
 9     </transition>
10     <!-- 自定義首碼的過渡,transitionName為變數 -->
11     <transition :name="transtionName">
12       <p v-if="!isHidden">使用rotate首碼的過渡</p>
13     </transition>
14   </div>
15 </template>
16 
17 <script>
18   export default {
19     name: '',
20     data() {
21       return {
22         isHidden: true,
23         transtionName: 'rotate' // 如果在運行時,將transitionName改為v會怎樣?
24 
25       }
26     }
27   }
28 </script>
29 
30 <style scoped>
31   .v-enter,
32   .v-leave-to {
33     opacity: 0;
34   }
35   .v-enter-active,
36   .v-leave-active {
37     transition-property: opacity; /* 過渡屬性 */
38     transition-delay: 100ms;  /* 延遲 */
39     transition-duration: 900ms; /* 過渡時長 */
40     transition-timing-function: linear; /* 貝塞爾曲線(動畫速度曲線) */
41   }
42   .rotate-enter,
43   .rotate-leave-to {
44     transform: rotateY(90deg);
45   }
46   .rotate-enter-active,
47   .rotate-leave-active {
48     transform-origin: left;
49     transition: transform 1s linear;
50   }
51 </style>

       結果(由於不能插入mp4,所以這裡就搞個靜態的截圖吧,從左到右,第一章是未點擊顯示按鈕,第二張是點擊

     顯示按鈕,第三張是再次點擊顯示按鈕):

            

      下麵讓我們來看一段代碼:

      這裡我們引入了一個新概念key:當元素的key值發生變化時,Vue不回覆用原有的元素,而將重建新的元素。根

      據這一特點,我們可以通過改變元素的key值來觸發過渡動畫,這常被用在元素切換時。

 1 <template>
 2   <div id="app">
 3     <button @click="isMaster = !isMaster">切換身份</button>
 4     <transition>
 5       <!-- 此處只寫了一個p標簽 -->
 6       <p :key="isMaster ? 'master' : 'other'">{{ isMaster ? '大家好!' : '東家好!' }}</p>
 7     </transition>
 8   </div>
 9 </template>
10 
11 <script>
12   export default {
13     name: '#app',
14     data () {
15       return {
16         isMaster: true
17       }
18     }
19   }
20 </script>
21 
22 <style scoped>
23   .v-enter, .v-leave-to {
24     opacity: 0;
25   }
26   .v-enter-active, .v-leave-active {
27     transition: opacity 1s;
28   }
29 </style>

       在瀏覽器打開如圖1,點擊切換身份(如圖二到三)在身份切換過程中點擊切換後前者並沒有立刻消失,而是隨著

      另一個身份的出現而漸漸消失,此間兩者都存在,那麼如何解決這個問題嘞?

      

     解決問題,修改如下代碼,這時候上面那個兩個身份同時出現的bug就消除啦:

 

1     <transition mode="out-in">
2       <!-- 此處只寫了一個p標簽 -->
3       <p :key="isMaster ? 'master' : 'other'">{{ isMaster ? '大家好!' : '東家好!' }}</p>
4     </transition>

 

(二)多節點過渡:

 1 <template>
 2   <div id="app">
 3     <button @click="addNewItem()">添加元素</button>
 4     <br>
 5     <transition-group name="list" tag="ul">
 6       <li v-for="item in list" :key="item">{{ item }}</li>
 7     </transition-group>
 8   </div>
 9 </template>
10 
11 <script>
12   export default {
13     name: '#app',
14     data () {
15       return {
16         list: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
17       }
18     },
19     methods: {
20       addNewItem () {
21         this.list.push(this.list.length)
22       }
23     }
24   }
25 </script>
26 
27 <style scoped>
28   .list-enter, .list-leave-to {
29     opacity: 0;
30     transform: translateY(30px);
31   }
32   .list-enter-active,
33   .list-leave-active {
34     transition: all 1s linear;
35   }
36 </style>

 

       結果(點擊添加元素,新的元素便會過渡出現,如下圖所示):

     

      最後提供一個元素隨機排序的簡單的項目,讀者們可以copy下來自己玩一下,裡面涉及的邏輯不是很難

 1 <template>
 2   <div id="app">
 3     <button @click="orderByRandom()">隨機順序</button>
 4     <br>
 5     <transition-group name="list" tag="ul">
 6       <li v-for="item in list" :key="item">{{ item }}</li>
 7     </transition-group>
 8   </div>
 9 </template>
10 
11 <script>
12   export default {
13     name: 	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ARetrofit 是一款針對Android組件之間通信的路由框架,實現快速組件化開發的利器。本文主要講述 ARetrofit 實現的原理。 ...
  • css媒體查詢有一個 寬高比很方便,aspect-ratio ,可以直接使用寬/高 來進行頁面適配 使用樣例如下: 註意三點: 1、寬高比一定是比值的形式,不能直接寫小數,寬/高 2、在less中直接寫寬高比也不會生效,因為less會編譯成小數,可以在比值前面加一個 ~ 完美解決 3、避免樣式覆蓋, ...
  • 在做微信介面開發的過程中, 有時候發現會提示簽名校驗失敗, 一模一樣的簽名邏輯就是有些介面跑步通, 找了一圈發現挺坑的; 原來是有些介面的signType簽名類型有區別, 有些介面signType要求是MD5,有的要求是HMAC-SHA256, 其實這兩種演算法都是 hash演算法的一種沒有太大的差別, ...
  • 相信很多小伙伴在開發小程式的時候都會碰到小程式Button預設樣式的困擾,在重設樣式的時候需要一次次的設置 這裡我分享一個自己在開發中的小方法: CSS all 簡寫屬性 將除 unicode-bidi 與 direction 之外的所有屬性重設至其初始值,或繼承值 而且 all 屬性沒有初始值 M ...
  • 首先來看一下網站效果,想寫這個項目的讀者可以自行下載哦,地址:https://github.com/Stray-Kite/Car: 在這個項目中,我們主要是為了學習語種切換,也就是右上角的 中文/English 功能的實現。 首先看一下模擬的後臺數據src/config/modules/lang.j ...
  • /* 17:10 2019/8/6 @author zhangxingshuo jQuery:"write less, do more" homepage: https://jquery.com/ jquery-1.12.4.js-| jquery-2.2.4.js--|- from jQuery ... ...
  • 1. 初來乍到 打開 Cocos Creator 點擊新建空白項目,在預設佈局的左下區域,一個黃黃assets文件夾映入眼帘。作為前端的你對這個文件是不是再熟悉不過了。是的,和你想象的一樣,開發游戲中所有資源,腳本都會放置到該文件。 2. 初步探索 項目建立好以後,對各區域的功能大致瞭解下,作為前端 ...
  • 效果如下 直接貼代碼了 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...