您好,登錄后才能下訂單哦!
這篇文章主要介紹“vue3組件化開發常用API知識點有哪些”,在日常操作中,相信很多人在vue3組件化開發常用API知識點有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”vue3組件化開發常用API知識點有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
為什么使用組件化開發?
當前前端比較流行的 Vue React 等框架,都會通過編寫組件來完成業務需求,也就是組件化開發。包括小程序開發也會用到組件化開發的思想。
分析組件化思想開發應用程序:
將一個完整頁面拆分成很多個小組件
每個組件用于完成頁面的一個功能模塊
每一個組件還可以細分 (父子組件)
通用的組件可以復用到不同的頁面
一個 Vue 的頁面,應該像是棵嵌套的組件樹的形式來組織:
vue3 入口文件:
import { createApp } from 'vue'; import App from './App.vue'; createApp(App).mount('#app');
createApp()
函數傳入了一個App
,App
就是一個組件,是項目的根組件。
下面將分析 Vue3 中組件化開發的常用方法。
$props
用于向子組件傳遞數據
<p> $props: {{$props}} </p>
<script setup>
語法糖中需要使用 defineProps
Api獲取props
const props = defineProps({ num: Number, })
$emit
用于調用父級組件的方法
<button @click="$emit('add')"> add </button>
<script setup>
語法糖中需要使用 defineEmits
Api聲明emits
<button @click="add">{{ num }}</button> const emits = defineEmits(['add']) function add() { emits('add') }
$parent
用于獲取父組件實例對象。
<script setup>
中組件實例不會暴露出來,直接在模板中使用$parent
會返回一個空對象。
為了在 <script setup>
組件中明確要暴露出去的屬性,使用 defineExpose
編譯器宏:
const parData = ref("父組件數據"); defineExpose({ parData, })
子組件:
<p>父組件 parData: {{$parent.parData}}</p>
包含了父作用域中不作為組件 props
或自定義事件的 attribute 綁定和事件。
子組件:
<Foo a="a" b="b" :num="num" @add="add" />
在父組件中,$attrs
的值就是 { "a": "a", "b": "b" }
。
當一個組件沒有聲明任何 prop 時,這里會包含所有父作用域的綁定,并且可以通過 v-bind="$attrs"
傳入內部組件——這在創建高階的組件時會非常有用,舉個例子:
父組件:
<Bar :age=18 sex="boy" />
子組件 Bar.vue
<p v-bind="$attrs">將$attrs對象綁定到當前標簽</p>
在瀏覽器查看DOM,age 和 sex
作為屬性被綁定到了這個p
標簽上面。
<script setup>
中,需要使用useAttrs
import { useAttrs } from 'vue'; const attrs = useAttrs(); console.log(attrs.sex); // boy
用于跨層級/多層級的組件通信
父組件有一個 provide
選項來提供數據,子組件有一個 inject
選項來開始使用這些數據。
父級組件:
provide("user", "kong"); provide("pass", 123456);
子孫級組件:
const user = inject("user"); const pass = inject("pass");
用于內容分發,將 <slot>
元素作為承載分發內容的出口。
SlotComp
組件
<template> <div :> <slot name="head"></slot> </div> <div :> <slot name="foot"></slot> </div> </template>
使用上面的組件
<SlotComp> <template v-slot:head> <p>head插槽</p> </template> <template v-slot:foot> <p>foot插槽</p> </template> </SlotComp>
SlotComp
組件中帶 name
屬性的 slot
插槽內容,會被替換。被替換的內容 需要在父組件中使用 v-slot
指令為插槽提供想要顯示的內容。
<template v-slot:foot> <p>foot插槽</p> {{msg}} {{items}} </template>
上面的例子,{{items}}
不會顯示數據。
父級模板里的所有內容都是在父級作用域中編譯的;子模板里的所有內容都是在子作用域中編譯的。
讓插槽的內容訪問子組件才有的數據:
<slot name="head" :item="items"></slot>
插槽內容:
<template v-slot:head = "slotProps"> <p v-for="i in slotProps.item">{{i}}</p> </template>
綁定在 <slot>
元素上的 attribute 被稱為插槽 prop。現在,在父級作用域中,我們可以使用帶值的 v-slot
來定義我們提供的插槽 prop 的名字,本例中就是slotProps
。
將 v-model
應用在表單上面,實現雙向綁定:
<input v-model="text" />
將 v-model
應用在自定義組件上面:
父組件中使用自定義組件:
const msg = ref('hello world!'); <ModelComp v-model="msg"></ModelComp>
相當于:
<ModelComp :modelValue="msg" @update:modelValue="msg = $event" > </ModelComp>
自定義組件ModelComp.vue
中:
const props = defineProps({ modelValue: String }) const emits = defineEmits([ "update:modelValue" ]) const text = ref("請輸入.."); // text改變時執行 watch(text,()=>{ emits("update:modelValue",text.value); })
未設置參數時如上,默認綁定的參數是 modelValue
update:modelValue
設置v-model
參數:
<ModelComp v-model:show="show"></ModelComp>
相當于:
<ModelComp :show="showFlag" @update:show="showFlag = $event" > </ModelComp>
自定義組件ModelComp.vue
中:
const props = defineProps({ show: Boolean }) const emits = defineEmits([ "update:show", ])
class綁定:根據需求動態綁定class樣式時可以使用一下幾種方法
寫法1:對象語法
<button @click="changeColor" :class="{ active: isActive }"> 點擊切換我的文體顏色樣式 </button> const isActive = ref(false); const changeColor = () => { isActive.value = !isActive.value; }
寫法2:對象語法
<button @click="changeColor2" :class="classObj"> 點擊切換顏色,根據計算屬性 </button> const isActive2 = reactive({ active: false, }) const classObj = computed(() => { return { active: isActive2.active, 'font-30': true, } }) const changeColor2 = () => { isActive2.active = !isActive2.active }
寫法3:數組語法
<div :class="[activeClass, errorClass]"></div>
三目運算符寫法
<div :class="[isActive ? activeClass : '', errorClass]"></div>
數組語法中結合對象語法使用
<div :class="[{ active: isActive }, errorClass]"></div>
動態綁定行內style樣式
三種方式:html代碼
<p :>style綁定</p>
<p :>style對象綁定(直接綁定到一個對象,代碼更清新)</p>
<p :>style數組綁定</p>
js 代碼
const colorRed = ref('#f00') const styleObj = reactive({ fontSize: '30px', }) const styleObjRed = reactive({ color: '#f00', })
到此,關于“vue3組件化開發常用API知識點有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。