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): voidSzczegół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 ): TSzczegół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 i jego wartości będą użyte. 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
truemusi 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 rozszerzaSymboli 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()
- Wspierane tylko w 3.3+
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