vue(3)—— vue的全局組件、局部組件

来源:https://www.cnblogs.com/yangva/archive/2019/03/20/10566030.html
-Advertisement-
Play Games

vue的組件,過濾器,監聽屬性,生命周期函數 vue有局部組件和全局組件,這個組件後期用的會比較多,也是非常重要的 局部組件 template與components屬性結合使用掛載 ...


組件

vue有局部組件和全局組件,這個組件後期用的會比較多,也是非常重要的

局部組件

 

template與components屬性結合使用掛載

 

 

其中 Vmain、Vheader、Vleft、Vcontent都是局部組件,Vheader、Vleft、Vcontent是一起掛載在Vmain組件上的,這裡的Vmain可以看成一個入口組件,再將入口組件掛載在Vue實例對象上,就可以渲染成一個頁面了

 

當然這裡我沒有給css屬性,看著不好看,感興趣的自己去添加就行了,並且這裡使用組件渲染頁面時,因為使用的是template屬性,所以el掛載點失效

 

利用內置組件<component :is="componentId"></component> 掛載使用

 

當然你說我就要掛載在app下呢?所以這裡又有另一種寫法,使用<component>標簽,裡面用v-bind綁定一個is屬性,is屬性值對應組件的名字,用引號包住

 

這樣的寫法,就可以直接哪裡需要組件,直接給一個<component>標簽就行了,而Vue實例化對象里不用掛載,也不用使用template屬性渲染了

 

這種寫法按照官方文檔,它是一個內置的組件(也就是自帶的,不需要我自己定義直接使用的):

 

  

組件還可以復用:

 

一個組件內的data必須是一個函數:

你如果在組件內想使用data那就用函數就完了,可以用單體模式定義data的函數,如:

 

 

註意

1.組件的使用步驟:

  • 創建一個組件
  • 掛載組件
  • 使用組件

2.組件使用時,就是組件的名字作為標簽,並且是單標簽,且必須要有閉合符號【/】

3.組件可以復用

4.組件內的data必須是一個函數

5.組件是一個單向數據流

6.定義組件名避免和html元素重合,導致一些不必要的事情發生

 

組件的組成結構是這樣的:

像如上的結構,在Vmain組件里又掛載了三個子組件,這些組件其實也完全可以直接掛載在Vue實例對象里啊,可以是可以的,我舉個生活的例子來說明,比如你是老闆,你有個通知要通知給你的每個員工,你是要自己去挨個通知呢?還是找個負責人,讓他帶你挨個通知呢?能理解了吧?

理解之後,看官方給的組件結構:

 

 

也就是是說,數據傳輸是單向的,一級一級的傳遞,為什麼這麼說呢?看完下麵的傳遞參數你就懂了

 

 

 

父級組件傳遞參數給子級組件

父向子傳參,需要使用props屬性

  

 

 步驟

1.定義好需要傳遞的參數

2.在template模板里用v-bind綁定好屬性

3.在Vue實例綁定的入口組件里添加 props屬性,裡面寫入Vue實例傳遞過來的的參數的鍵(註意是鍵不是值)

4.在利用props屬性接收到的組件里綁定屬性,鍵為自定義鍵,值為props父級組件傳遞過來的的鍵

5.在子級里同樣的利用props接收參數

6.是否需要再往子級組件傳遞參數,如果要,再用v-bind綁定屬性,屬性的鍵自定義,值為父級傳遞過來的鍵,如果不再傳遞,直接用jinja2語法渲染到標簽元素里

 

同樣的,如果要使用component內置組件來渲染,直接掛載到元素里,其他沒做任何改動:

 

子級向父級傳遞參數

 

在以後的開發中,可能會遇到,子級會向父級反饋數據的情況,所以,子級向父級傳遞參數這個功能還是挺有用的。

但是本質上並不是直接傳輸,而是通過v-on監聽事件傳輸的,結合Vue實例里的$emit實現的。這個$emit是Vue實例里自帶的,$emit()方法來觸發自定義的事件, 第一個參數是自定義的事件名字 第二個參數就是傳遞的值,其中this指的vue實例化對象的子類

 

 

如上,父級的Vmain組件確實拿到了,併在控制台輸出了

 

註意:

 

1.子級組件根據子級的邏輯向父級傳遞的參數,使用的是this.$emit方法,有關$emit的方法,傳送門 

通俗的說,你可以理解為this.$emit就是一個數據通道,可以連接子級組件和父級組件

2.父級組件中v-on綁定的方法名必須和$emit()第一個參數的事件名一致,即可以理解為自定的監聽事件,之後則可以通過這個事件接收到子級傳來的參數了

 

全局組件

 

全局組件,顧名思義了,不多解釋了 

 

全局組件定義好後不需要掛載(或者叫註冊),直接可以使用,使用的全局組件名作為標簽,且是雙標簽

 

那前面的局部組件用了另一種渲染方式,使用了<component>標簽,你可能會想,這裡全局也用<component>標簽會怎麼樣呢?不行的,會報錯,提示未定義

 

所以你需要在data里先定義一下就行:

 

 

  

 

定義全局組件的其他兩個方法

 

利用script標簽(比較少見)

 

利用Vue.extend和Vue.component

 

利用template標簽

這個以後在組件化開發中用的很多

 

 

 

動態組件:

動態組件是利用component結合全局組件做出來的,官方解釋:

 

如下,點頭部,頁面就顯示成頭部內容,點底部,就顯示成了底部內容

 

這裡的a標簽我綁定了一個v-on,阻止了冒泡事件啊,就是前面的知識點了,詳細的不多說

 

 

全局組件也可以被局部組件使用,並且復用:

 

插槽<slot>

但是,如果復用全局組件就有一個問題,因為在實際開發中,有公用的元素就可以使用公用的,比如繼承一個公用的css屬性什麼的,但是每個內容部分都有不同的數據,或者說需要在公用的基礎上做些自己適當的調整嗎,像這種需求是很多的。比如如下,我想顯示不同的內容這樣就無法顯示內容:

 

 

 

所以這裡需要用到內置組件<slot>,如下,其他沒做任何更改,只是在創建全局組件部分插入了一個<slot></solt>組件即可顯示我們想要顯示的內容

 

 

 

然後,其他就沒什麼需要註意的了,因為全局組件的用法其實跟局部組件的用法是一樣的

 

 

總結:

vue的組件,看著知識點多,有點繞,但還是基礎,且是非常重要的基礎,一定要註意以上提到的註意點

 


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

-Advertisement-
Play Games
更多相關文章
  • 過濾器 vue允許自定義過濾器,我個人認為,過濾器有兩種,一種是對數據的清洗過濾,一種是對數據切換的動畫過濾 數據切換的動畫過濾 這裡還是利用前面的動態組件的例 ...
  • 今天弄一個autocomplete 向後後臺動態傳遞參數的問題 params: { "saleid": $("#divSalesman input[field='SalesmanId']").val() }, //這樣是不行的因為autocomplete() 方法不會每次都載入一遍,所以 $("#d ...
  • 一鍵獲取微信小程式源代碼 前言 最近開始學習微信小程式的開發,可是苦於(自學),很多東西看了也不太會。發現小程式的坑遠比想象的要多的多!!看到人家上線的小程式的效果,純靠推測,部分效果在絞盡腦汁後能做出大致的實現,但是有些細節,費勁全力都沒能做出來。很想一窺源碼,查看究竟,看看大廠的前端大神們是如何 ...
  • 數據類型:數字、Date、字元串。字元串的常用方法,Date對象的常用方法,轉義符。 ...
  • 預設的input項是比較難看的,並且它的寬度還無法隨著輸入而變化,這樣未免有些呆板,不過藉助JavaScript可以達到寬度自適應的效果,下麵為了方便使用了jQuery: 點擊此查看樣例 ...
  • 有些時候為了強調某些文字,需要使用一些比較特別的字體,CSS中現在也可以比較方便的引入字體了,如下: 其中font-family就是之後使用時候的字體名稱了,如此一來CSS中就可以直接使用本地的字體了,如下: 如果需要引用線上字體,首先需要找到線上字體,國內推薦谷歌字體,雖然裡面的中文字體不知道什麼 ...
  • 進行樣式修改,初步修改的內容 #home{width:90%;position:relative;}#blogTitle a{color:#fff; text-shadow:1px 1px 5px #ccc;}#blogTitle h2{color:#ffe;font-weight:700;text ...
  • 剛入職的時候看到公司用的HTML日誌生成工具附帶的Panel,工具不夠用,找個Fail還要找半天,於是自己琢磨著添磚加瓦。以前也是個半吊子前端工程師,現在可倒好,想要改頁面卻連頁面生成的模板在哪裡都不知道,只有通過改動JavaScript才能實現對頁面的修改。 固然,操作DOM有原版的 一族,可是它 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...