Composition API:
Inyección de Dependencias
provide()
Proporciona un valor que puede ser inyectado por componentes descendientes.
Type
tsfunction provide<T>(key: InjectionKey<T> | string, value: T): voidDetalles
provide()toma dos argumentos: la clave, que puede ser una cadena o unsymbol, y el valor a inyectar.Cuando se usa TypeScript, la clave puede ser un
symbolcasteado comoInjectionKey- un tipo de utilidad proporcionado por Vue que extiendeSymbol, el cual puede ser usado para sincronizar el tipo de valor entreprovide()einject().Similar a las APIs de registro de
lifecycle hook,provide()debe ser llamado de forma síncrona durante la fasesetup()de un componente.Ejemplo
vue<script setup> import { ref, provide } from 'vue' import { countSymbol } from './injectionSymbols' // provide static value provide('path', '/project/') // provide reactive value const count = ref(0) provide('count', count) // provide with Symbol keys provide(countSymbol, count) </script>Ver también
inject()
Inyecta un valor proporcionado por un componente ancestro o la aplicación (a través de app.provide()).
Type
ts// without default value function inject<T>(key: InjectionKey<T> | string): T | undefined // with default value function inject<T>(key: InjectionKey<T> | string, defaultValue: T): T // with factory function inject<T>( key: InjectionKey<T> | string, defaultValue: () => T, treatDefaultAsFactory: true ): TDetalles
El primer argumento es la clave de inyección. Vue recorrerá la cadena de padres para localizar un valor proporcionado con una clave coincidente. Si múltiples componentes en la cadena de padres proporcionan la misma clave, el más cercano al componente que inyecta "ensombrecerá" a los que estén más arriba en la cadena y se usará su valor. Si no se encontró ningún valor con una clave coincidente,
inject()devuelveundefineda menos que se proporcione un valor por defecto.El segundo argumento es opcional y es el valor por defecto a usar cuando no se encontró ningún valor coincidente.
El segundo argumento también puede ser una función
factoryque devuelve valores que son costosos de crear. En este caso,truedebe pasarse como tercer argumento para indicar que la función debe usarse comofactoryen lugar del valor en sí.Similar a las APIs de registro de
lifecycle hook,inject()debe ser llamado de forma síncrona durante la fasesetup()de un componente.Cuando se usa TypeScript, la clave puede ser del tipo
InjectionKey- un tipo de utilidad proporcionado por Vue que extiendeSymbol, el cual puede ser usado para sincronizar el tipo de valor entreprovide()einject().Ejemplo
Asumiendo que un componente padre ha proporcionado valores como se muestra en el ejemplo
provide()anterior:vue<script setup> import { inject } from 'vue' import { countSymbol } from './injectionSymbols' // inject static value without default const path = inject('path') // inject reactive value const count = inject('count') // inject with Symbol keys const count2 = inject(countSymbol) // inject with default value const bar = inject('path', '/default-path') // inject with function default value const fn = inject('function', () => {}) // inject with default value factory const baz = inject('factory', () => new ExpensiveObject(), true) </script>Ver también
hasInjectionContext()
- Solo compatible con 3.3+
Devuelve true si inject() puede usarse sin advertencia por ser llamado en el lugar incorrecto (por ejemplo, fuera de setup()). Este método está diseñado para ser usado por librerías que quieren usar inject() internamente sin activar una advertencia para el usuario final.
Type
tsfunction hasInjectionContext(): boolean








