Composition API:
Dependency Injection
provide()
Dostarcza wartość, która może zostać wstrzyknięta przez komponenty potomne.
Typ
tsfunction provide<T>(key: InjectionKey<T> | string, value: T): void
Szczegóły
provide()
przyjmuje dwa argumenty: klucz, który może być ciągiem znaków lub symbolem, oraz wartość, która ma zostać wstrzyknięta.Podczas korzystania z TypeScript klucz może być symbolem rzutowanym jako
InjectionKey
- typ narzędzia dostarczony przez Vue, który rozszerzaSymbol
, który może być używany do synchronizacji typu wartości międzyprovide()
iinject()
.Podobnie jak w przypadku interfejsów API rejestracji funkcji cyklu życia,
provide()
musi być wywoływane synchronicznie podczas fazysetup()
komponentu.Przykład
vue<script setup> import { ref, provide } from 'vue' import { countSymbol } from './injectionSymbols' // dostarcza statyczną wartość provide('path', '/project/') // dostarcza wartość reaktywną const count = ref(0) provide('count', count) // provide z kluczem typu Symbol provide(countSymbol, count) </script>
Zobacz również
inject()
Wstrzykuje wartość dostarczoną przez komponent nadrzędny lub aplikację (za pomocą app.provide()
).
Typ
ts// bez domyślnej wartości function inject<T>(key: InjectionKey<T> | string): T | undefined // z domyślną wartością function inject<T>(key: InjectionKey<T> | string, defaultValue: T): T // z fabryką function inject<T>( key: InjectionKey<T> | string, defaultValue: () => T, treatDefaultAsFactory: true ): T
Szczegóły
Pierwszy argument to klucz wstrzykiwania. Vue przejdzie w górę łańcucha nadrzędnego, aby zlokalizować podaną wartość z pasującym kluczem. Jeśli wiele komponentów w łańcuchu nadrzędnym dostarcza ten sam klucz, ten najbliższy komponentowi wstrzykiwania „przyćmi" te wyżej w łańcuchu. Jeśli nie znaleziono wartości z pasującym kluczem,
inject()
zwracaundefined
, chyba że podano wartość domyślną.Drugi argument jest opcjonalny i jest wartością domyślną, która ma być używana, gdy nie znaleziono pasującej wartości.
Drugi argument może być również funkcją fabryczną, która zwraca wartości, których utworzenie jest kosztowne. W takim przypadku
true
musi zostać przekazane jako trzeci argument, aby wskazać, że funkcja powinna być używana jako fabryka, a nie sama wartość.Podobnie jak w przypadku interfejsów API rejestracji funkcji cyklu życia,
inject()
musi być wywoływane synchronicznie podczas fazysetup()
komponentu.W przypadku języka TypeScript klucz może być typu
InjectionKey
— typu narzędzia dostarczonego przez Vue, który rozszerzaSymbol
i może służyć do synchronizacji typu wartości pomiędzyprovide()
iinject()
.Przykład
Zakładając, że komponent nadrzędny dostarczył wartości, jak pokazano w poprzednim przykładzie
provide()
:vue<script setup> import { inject } from 'vue' import { countSymbol } from './injectionSymbols' // wstrzykuje wartość statyczną bez wartości domyślnej const path = inject('path') // wstrzykuje wartość rekatywną const count = inject('count') // inject z kluczem typu Symbol const count2 = inject(countSymbol) // inject z wartością domyślną const bar = inject('path', '/default-path') // inject z funkcją zwracającą wartość domyślną const fn = inject('function', () => {}) // inject z wartiością domyślną fabryki const baz = inject('factory', () => new ExpensiveObject(), true) </script>
Zobacz również
hasInjectionContext()
Zwraca wartość true, jeśli inject() może zostać użyte bez ostrzeżenia o wywołaniu w niewłaściwym miejscu (np. poza setup()
). Ta metoda jest przeznaczona do użytku przez biblioteki, które chcą używać inject()
wewnętrznie bez wywoływania ostrzeżenia u użytkownika końcowego.
Typ
tsfunction hasInjectionContext(): boolean