Vue筆記(三)深入組件

組件注冊

組件注冊有兩種方式:

  1. 全局注冊
    可以使用Vue應用實例的.component()方法,讓組件在當前Vue應用中全局可用,.component()方法可以被鏈式調用。全局注冊的組件可以在此應用的任意組件的模版中使用。
    import { createApp } from 'vue'
    import { MyComponent } from './MyComponent.vue'const app = createApp({
    })
    app.component('MyComponent',MyComponent)
  2. 局部注冊
    局部注冊的組件需要在它的父組件中顯示導入,并且只能在父組件中使用,依賴關系更加明確。
    <script>
    import MyComponent from './MyComponent'export default{components:{MyComponent}
    }
    </script><template><MyComponent />
    </template>s
    

Props

一個組件需要顯示聲明它所接受的props。聲明props的方式有兩種:

  1. 字符串數組
    export default{props:['animal','zoo'],created(){//props 會暴露到 this 上console.log(this.animal);console.log(this.zoo);}
    }
    
  2. 對象的形式
    export default{props:{title:string,age:number}
    }
    

靜態Prop、動態Prop

  1. 靜態Prop傳參形式
    <child-component title="this is title" />
    
  2. 動態Prop傳參形式,使用v-bind或縮寫:來進行動態綁定
    <child-component :title="自定義的變量"/>
    

事件

觸發與監聽事件

  1. 觸發(子組件):在組件模版表達式中,可以直接使用$emit方法觸發自定義事件
    //1. 第一種觸發方式
    <button @click="$emit('click')">觸發click事件</button>
    //2. 第二種觸發方式,函數觸發, this.$emit
    export default{methods:{submit(){this.$emit('click');}}
    }
    
  2. 父組件可以通過v-on@來監聽事件
    //1. 觸發
    <child-component @click="alert(1)" />
    //2. 事件監聽器也支持 .once 修飾符
    <child-component @click.once="alert(1)" />
    

事件參數
可以給觸發的事件傳入參數,父組件可以處理傳入的參數

  1. 子組件傳入參數
    <button @click="emit('click',1,2)">傳入參數給父組件</button>
    
  2. 父組件處理參數
    <child-component @click="fun1"/>//處理參數的方法
    methods:{fun1:function(var1,var2){console.log(var1);console.log(var2);}
    }
    

插槽 Slots

  1. 父組件傳入,插槽內容可以是任意合法的模版內容,不局限于文本,可以傳入多個HTML元素,甚至組件
    <child-component>傳入內容
    </child-component>
    
  2. 子組件插槽占位
    <h1><slot></slot>
    </h1>
    

插槽渲染作用域
插槽可以訪問到父組件的數據作用域,因為插槽內容本身是在父組件中定義的。插槽無法訪問子組件的數據。

插槽默認內容
如果父組件沒有提供任何內容,可以為插槽指定默認內容

<button><slot>默認內容</slot>
</button>

具名插槽

  1. 子組件為插槽指定名稱,沒有提供name<slot>會隱式地命名為default
    <div><slot name="header"></slot><slot name="footer"></slot><slot></slot>
    </div>
  2. 父組件指定插槽名稱傳入內容,v-slot簡寫#
    <child-component><template #header>This is header</template><template #footer>This is footer</template><template #default>This is default</template>
    </child-component>
    

動態插槽名
可以使用動態的插槽名,傳給子組件內容

<child-component><template v-slot:[defineSlotName]></template><template #[defineSlotName]></template>
</child-component>

作用域插槽
某些場景下插槽的內容想要同時使用父組件域內和子組件域內的數據,子組件可以在渲染時將一部份數據提供給插槽

  1. 默認插槽
    //子組件插槽插入數據
    <div><slot :name="zqq" :age="18"></slot>
    </div>
    //父組件使用
    <child-component v-slot="vslot">{{ vsolt.name }} {{ vsolt.age }}
    </child-component>
    
  2. 具名作用域插槽
    //子組件插槽傳入數據,name是vue特別保留的attribute,不會作為props傳遞給插槽
    <slot name="header" message="hello">
    </slot>
    //父組件使用
    <child-component><template #header="data">{{ data s}}</template>
    </child-component>
    

依賴注入

一個父組件相當于其所有的后代組件,會作為依賴提供者。任何后代的組件樹,無論層級多深,都可以注入由父組件提供給整條鏈路的依賴。關鍵字:provideinject

  1. provide(提供),為后代組件提供數據
    //為后代組件提供數據
    export default{privode:{message:'hello'}
    }
    //為后代組件提供data()定義的數據屬性,以函數形式使用provide
    export default{data(){return{message:'hello'}},provide:(){return{message:this.message;}}
    }//在應用層為全部組件提供依賴
    import { createApp } from 'vue'const app = createApp({})
    // message是注入的名稱,hello是值
    app.provide('message','hello');
    
  2. Inject(注入),子組件注入父組件(隔代父組件也可以)提供的依賴
    export default{inject:['message'],data(){return{//注入會在組件自身狀態之前被解析,可以通過this訪問注入的值localMessage:this.message}}
    }
    

注入別名和默認值

export{inject:{// localMessage是自定義的本地別名,后續訪問注入的內容,使用this.localMessagelocalMessage:{from:'message',default:'default' //可以指定默認值}}
}

和響應式數據配合使用
為了保證注入方和供給方之間的響應性鏈接,需要使用computed()函數提供一個計算屬性

import default{data(){return{message:'hello'}}provide(){return{message:computed(() => this.message)}}}
}

異步組件

在大型項目中,我們可能需要拆分應用為更小的塊,并僅在需要時再從服務器加載相關組件,Vue提供了defineAsyncComponent方法來實現

const AsyncComp = defineAsynComponet(() => {return new Promise(() =>{//...從服務器獲取組件resolve(/*獲取到的組件*/);})
})

導入Vue單文件組件

import { defineAsyncComponent } from 'vue'const AsyncComp defineAsyncComponent(() => import('./components/MyComponent.vue'))

最后得到的AsyncComp是一個外層包裝過的組件,僅在頁面需要它渲染時才會調用加載內部實際組件的函數。它會將受到的props和插槽傳給內部組件,所以可以使用這個異步的包裝組件無縫地替換原始組件,同時實現延遲加載。

異步組件注冊

  1. 全局注冊
    app.component('MyComponent',defineAsyncComponent(() => import('./components/MyComponent.vue'))
    
  2. 局部注冊
    <script>
    impoty { defineAsyncComponent } from 'vue'export default{components{MyComponent:defineAsyncComponent(() = import('./components/MyComponent.vue'))}
    }
    </script>
    

加載與錯誤狀態

const AsyncComp = defineAsyncComponent({//加載組件函數loader:() => import(',MyComponent'),//展示加載組件的延遲時間,默認200msdelay:200,//加載失敗后展示的組件errorComponent:ErrorComponent,//加載組件超時時間,默認沒有超時時間,如果超市,會顯示 加載失敗展示的組件timeOut: 3000
})

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210259.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210259.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210259.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

阿里云生態離線數倉

1. 大數據開發治理平臺 DataWorks 功能齊全&#xff1a;10多年大數據建設沉淀完整的平臺&#xff0c;覆蓋數據開發治理的全生命周期 簡單易用&#xff1a;全圖形化界面&#xff0c;SQL為主的數據開發方式 安全穩定&#xff1a;雙11日千萬級任務穩定調度&#x…

一:C語言常見概念

一&#xff1a;C語言常見概念 1.認識C語言&#xff1a; ? C語言是人和計算機交流的語言 ? C語言是一門面向過程的語言&#xff0c;而C&#xff0c;Java&#xff0c;Python等是一門面向對象的語言 ? 軟件開發&#xff08;項目&#xff09;&#xff1a;面向過程面向對象 …

maven下載安裝與配置

文章目錄 1. Maven下載2. 配置settings.xml2.1 指定Maven的本地倉庫2.2 配置阿里云提供的鏡像倉庫2.3 配置 Maven 工程的基礎 JDK 版本 3. 配置環境變量3.1 檢查 JAVA_HOME 配置是否正確3.2 配置 MAVEN_HOME3.3 配置PATH3.4 驗證 1. Maven下載 【Maven官網地址】 【Maven下載…

微服務架構下的分布式事務

系統軟件為了實現一定的業務&#xff0c;會將現實中的人、事、物進行抽象表示&#xff0c;并將其映射為系統中的模型。 業務模型大致可以按以下來構建&#xff1a; 1、定義系統中應該存在哪些實體、實體上有哪些屬性。 2、定義實體之間的各種拓撲關系&#xff0c;如從屬、嵌套…

2023五岳杯量子計算挑戰賽數學建模思路+模型+代碼+論文

賽題思路&#xff1a;12月6日晚開賽后第一時間更新&#xff0c;獲取見文末名片 “五岳杯”量子計算挑戰賽&#xff0c;是國內專業的量子計算大賽&#xff0c;也是玻色量子首次聯合移動云、南方科技大學共同發起的一場“企校聯名”的國際競賽&#xff0c;旨在深度融合“量子計算…

Python處理Excel文件并與數據庫匹配做拼接

Python處理Excel文件并與數據庫匹配做拼接 需求&#xff1a;Python處理Excel中數據并于數據庫交互匹配得到賬號信息等其他操作 Python實現 import os import pandas as pd import pymssql import warnings import time# 提取速率函數 def extract_broadband_speed(speed):if…

【外觀模式】SpringBoot集成mail發送郵件

前言 發送郵件功能&#xff0c;借鑒 剛果商城&#xff0c;根據文檔及項目代碼實現。整理總結便有了此文&#xff0c;文章有不對的點&#xff0c;請聯系博主指出&#xff0c;請多多點贊收藏&#xff0c;您的支持是我最大的動力~ 發送郵件功能主要借助 mail、freemarker以及rocke…

Java 泛型相關知識

什么是泛型? Java 泛型(generics)是JDK5中引入的一種參數化類型特性。 為什么使用泛型,使用泛型的好處? 代碼更健壯(只要編譯期沒有警告,那么運行期就不會出現 ClassCastException)代碼更簡潔(不用強轉)代碼更靈活,復用什么是參數化類型: 把類型當參數一樣傳遞<…

C語言絕對值得一看的常識講解:柔性數組補充篇

今天突然看到一個比較特別的知識點——柔性數組。它是在C99中出現的一種特別的數組&#xff0c;具體是指結構體中的最后一個元素允許是未知大小的數組&#xff0c;這就叫做『柔性數組』成員。 目錄 1.柔性數組的定義 2.柔性數組的特點 3.柔性數組的使用舉例 4.柔性數組的優…

React基礎語法整理

安裝&#xff1a; yarn create react-app reatc-lesson --template typescript yarn create 創建一個react-app的應用 項目名稱 typescript 的模板react-app 官方地址 https://create-react-app.bootcss.com/docs/adding-typescriptreact 語法文檔 https://zh-hans.react.dev…

Vue筆記(一)基礎

VUE 官方文檔&#xff1a;https://cn.vuejs.org/ 創建VUE項目 前提&#xff1a;已安裝 16.0 或更高版本的 Node.js 進入要創建的目錄&#xff0c;執行命令&#xff1a;npm create vuelatest 安裝依賴&#xff0c;啟動&#xff1a; //進入項目目錄&#xff0c;運行命令安裝依賴…

基于Vue框架的電子商城購物平臺小程序的設計與開發

基于JavaWebSSMVue電子商城購物平臺小程序系統的設計和實現 源碼獲取入口KaiTi 報告/Ren務書Lun文目錄前言主要技術系統設計功能截圖訂閱經典源碼專欄Java項目精品實戰案例《500套》 源碼獲取 源碼獲取入口 KaiTi 報告/Ren務書 一、選題的目的和意義 自從微信推出了微信小程序…

使用命令行移除VSAN中故障磁盤

原創作者&#xff1a;運維工程師 謝晉 使用命令行移除VSAN中故障磁盤 前提故障盤移除 前提 客戶有套VSAN環境內有一臺服務器的磁盤組出現了一塊故障的數據盤&#xff0c;但該盤已經處于完全掉線狀態&#xff0c;無法進行正常移除。如下圖&#xff1a; 如果遇到這種情況&am…

P9 LinuxC 進程概述 終端啟動的程序父進程是終端

前言 &#x1f3ac; 個人主頁&#xff1a;ChenPi &#x1f43b;推薦專欄1: 《C_ChenPi的博客-CSDN博客》??? &#x1f525; 推薦專欄2: 《Linux C應用編程&#xff08;概念類&#xff09;_ChenPi的博客-CSDN博客》??? &#x1f6f8;推薦專欄3: ??????《鏈表_ChenP…

【1】一文讀懂PyQt簡介和環境搭建

目錄 1. PyQt簡介 1.1. Qt 1.2. PyQt 1.3. 關于PyQt和PySide 2. 通過pip安裝PyQt5 3. 無法運行處理 4. VSCode配置PYQT插件 PyQt官網:Riverbank Computing | Introduction 1. PyQt簡介 PyQt是一套Python的GUI開發框架,即圖形用戶界面開發框架。 Python中經常使用的GU…

FreeRTOS的內存管理方法(超詳細)

內存管理 我們知道每次創建任務、隊列、互斥鎖、軟件定時器、信號量或事件組時&#xff0c;RTOS 內核都需要 RAM &#xff0c; RAM 可以從 RTOS API 對象創建函數內的 RTOS 堆自動動態分配&#xff0c; 或者由應用程序編寫者提供。 如果 RTOS 對象是動態創建的&#xff0c;那么…

Leetcode—2646.最小化旅行的價格總和【困難】

2023每日刷題&#xff08;五十三&#xff09; Leetcode—2646.最小化旅行的價格總和 算法思想 看靈神的 實現代碼 class Solution { public:int minimumTotalPrice(int n, vector<vector<int>>& edges, vector<int>& price, vector<vector&l…

發現數學之美--微積分的起源和用途(一文搞懂微積分)

數學&#xff0c;改變世界的基石。微積分十九世紀的三大自然發現之一&#xff0c;迪卡爾建立了解析幾何&#xff0c;把數與圖結合在一起&#xff0c;微積分的發現與創立&#xff0c;是數學新的里程碑&#xff0c;解決了常規方法無法解決的問題&#xff0c;是一次偉大的革命。迪…

服務器數據損壞了有辦法修復嗎 ?

對于企業網站來說&#xff0c;數據庫往往是服務器中最核心的部分&#xff0c;所以一旦數據庫發生損壞&#xff0c;將會給企業帶來巨大的損失&#xff0c;因 此數據庫的數據恢復功能變得越來越重要了。在服務器運行過程中&#xff0c;由于斷電、操作不當或者是客觀原因損壞到服務…

git安裝和配置

git安裝和配置 一、軟件介紹 Git是一個免費開源的分布式版本控制系統&#xff0c;旨在快速高效地處理從小型到大型項目的所有內容。 Git易于學習&#xff0c;占地面積小&#xff0c;性能閃電般快。它以廉價的本地分支、方便的暫存區域和多個工作流等功能勝過了Subversion、C…