Composition API:
Bog'liqlik In'ektsiyasi
provide()
Avlod komponentlar tomonidan in'ektsiya qilish mumkin bo'lgan qiymatni ta'minlaydi.
Turi
tsfunction provide<T>(key: InjectionKey<T> | string, value: T): void
Tafsilotlar
provide()
ikkita argument oladi: kalit, bu string yoki symbol bo'lishi mumkin, va in'ektsiya qilinadigan qiymat.TypeScript ishlatganda, kalit
InjectionKey
sifatida cast qilingan symbol bo'lishi mumkin - bu Vue tomonidan ta'minlanganSymbol
ni kengaytiruvchi utility turi, uprovide()
vainject()
o'rtasidagi qiymat turini sinxronlashtirish uchun ishlatilishi mumkin.Hayot aylanishi hook'larini ro'yxatdan o'tkazish API'lari singari,
provide()
komponentningsetup()
bosqichida sinxron ravishda chaqirilishi kerak.Misol
vue<script setup> import { ref, provide } from 'vue' import { countSymbol } from './injectionSymbols' // statik qiymatni ta'minlash provide('path', '/project/') // reaktiv qiymatni ta'minlash const count = ref(0) provide('count', count) // Symbol kalitlari bilan ta'minlash provide(countSymbol, count) </script>
Qarang
inject()
Ota-ona komponent yoki ilova tomonidan ta'minlangan qiymatni in'ektsiya qiladi (app.provide()
orqali).
Turi
ts// default qiymatsiz function inject<T>(key: InjectionKey<T> | string): T | undefined // default qiymat bilan function inject<T>(key: InjectionKey<T> | string, defaultValue: T): T // factory bilan function inject<T>( key: InjectionKey<T> | string, defaultValue: () => T, treatDefaultAsFactory: true ): T
Tafsilotlar
Birinchi argument in'ektsiya kaliti. Vue ota-ona zanjirini yuqoriga ko'tarib, mos keladigan kalitga ega ta'minlangan qiymatni topadi. Agar ota-ona zanjiridagi bir nechta komponentlar bir xil kalitni ta'minlasa, in'ektsiya qiluvchi komponentga eng yaqin bo'lgani zanjirdagi yuqoridagilarni "soya" qiladi va uning qiymati ishlatiladi. Agar mos keladigan kalitga ega qiymat topilmasa,
inject()
default qiymat ta'minlanmagunchaundefined
qaytaradi.Ikkinchi argument ixtiyoriy va mos keladigan qiymat topilmaganda ishlatiladigan default qiymat.
Ikkinchi argument shuningdek, yaratish qimmat bo'lgan qiymatlarni qaytaruvchi factory funksiyasi bo'lishi mumkin. Bu holatda, funksiya o'z-o'zidan qiymat o'rniga factory sifatida ishlatilishi kerakligini ko'rsatish uchun uchinchi argument sifatida
true
o'tkazilishi kerak.Hayot aylanishi hook'larini ro'yxatdan o'tkazish API'lari singari,
inject()
komponentningsetup()
bosqichida sinxron ravishda chaqirilishi kerak.TypeScript ishlatganda, kalit
InjectionKey
turida bo'lishi mumkin - bu Vue tomonidan ta'minlanganSymbol
ni kengaytiruvchi utility turi, uprovide()
vainject()
o'rtasidagi qiymat turini sinxronlashtirish uchun ishlatilishi mumkin.Misol
Ota-ona komponent oldingi
provide()
misolidagi kabi qiymatlarni ta'minlagan deb faraz qilamiz:vue<script setup> import { inject } from 'vue' import { countSymbol } from './injectionSymbols' // default qiymatsiz statik qiymatni in'ektsiya qilish const path = inject('path') // reaktiv qiymatni in'ektsiya qilish const count = inject('count') // Symbol kalitlari bilan in'ektsiya qilish const count2 = inject(countSymbol) // default qiymat bilan in'ektsiya qilish const bar = inject('path', '/default-path') // funksiya default qiymati bilan in'ektsiya qilish const fn = inject('function', () => {}) // default qiymat factory bilan in'ektsiya qilish const baz = inject('factory', () => new ExpensiveObject(), true) </script>
Qarang
hasInjectionContext()
- Faqat 3.3+ versiyasida qo'llab-quvvatlanadi
Agar inject() noto'g'ri joyda chaqirilgani haqida ogohlantirishsiz ishlatilishi mumkin bo'lsa (masalan, setup()
dan tashqarida), true
qaytaradi. Bu metod inject()
ni ichki ishlatishni xohlaydigan va oxirgi foydalanuvchiga ogohlantirishni ishga tushirmasdan ishlatish uchun mo'ljallangan kutubxonalar uchun mo'ljallangan.
Turi
tsfunction hasInjectionContext(): boolean