API de Composição:
Injeção de Dependência
provide()
Fornece um valor que pode ser injetado pelos componentes descendentes.
Tipo
tsfunction provide<T>(key: InjectionKey<T> | string, value: T): void
Detalhes
provide()
recebe dois argumentos: a chave, que pode ser uma sequência de caracteres ou um símbolo, e o valor a ser injetado.Quando usamos a TypeScript, a chave pode ser um símbolo moldado como
InjectionKey
- um tipo de utilitário fornecido pela Vue que estende oSymbol
, que pode ser usado para sincronizar o tipo de valor entreprovide()
einject()
.Semelhante às APIs de registo de gatilho de ciclo de vida,
provide()
deve ser chamada de maneira síncrona durante a fasesetup()
dum componente.Exemplo
vue<script setup> import { ref, provide } from 'vue' import { fooSymbol } from './injectionSymbols' // fornecer valor estático provide('foo', 'bar') // fornecer valor reativo const count = ref(0) provide('count', count) // fornecer com chaves de símbolo provide(fooSymbol, count) </script>
Consultar também:
inject()
Injeta um valor fornecido por um componente ancestral ou pela aplicação (através de app.provide()
).
Tipo
ts// sem valor padrão function inject<T>(key: InjectionKey<T> | string): T | undefined // com valor padrão function inject<T>(key: InjectionKey<T> | string, defaultValue: T): T // com fábrica function inject<T>( key: InjectionKey<T> | string, defaultValue: () => T, treatDefaultAsFactory: true ): T
Detalhes
O primeiro argumento é a chave de injeção. A Vue percorrerá a cadeia dos pais para localizar um valor fornecido com uma chave correspondente. Se vários componentes na cadeia dos pais fornecerem a mesma chave, o componente mais próximo do componente injetor "sombreará" os componentes mais acima na cadeia. Se nenhum valor com a chave correspondente for encontrado,
inject()
retornaundefined
a menos que um valor padrão seja fornecido.O segundo argumento é opcional e é o valor padrão a ser usado quando nenhum valor correspondente foi encontrado.
O segundo argumento também pode ser uma função de fábrica que retorna valores cuja criação é dispendiosa. Neste caso,
true
deve ser passado como terceiro argumento para indicar que a função deveria ser usada como uma fábrica ao invés do próprio valor.Semelhante às APIs de registo de gatilho de ciclo de vida,
inject()
deve ser chamada de maneira síncrona durante a fasesetup()
dum componente.Quando usamos a TypeScript, a chave pode ser do tipo de
InjectionKey
- um tipo de utilitário fornecido pela Vue que estende oSymbol
, que pode ser usado para sincronizar o tipo de valor entreprovide()
einject()
.Exemplo
Assumindo que um componente pai forneceu valores como mostrado no exemplo anterior de
provide()
:vue<script setup> import { inject } from 'vue' import { fooSymbol } from './injectionSymbols' // injetar valor estático sem padrão const foo = inject('foo') // injetar valor reativo const count = inject('count') // injetar com chaves de símbolo const foo2 = inject(fooSymbol) // injetar com valor padrão const bar = inject('foo', 'default value') // injetar com valor padrão de função const fn = inject('function', () => {}) // injetar com fábrica de valor padrão const baz = inject('factory', () => new ExpensiveObject(), true) </script>
Consultar também:
hasInjectionContext()
Retorna verdadeiro se inject()
puder ser usada sem aviso por ter sido chamada no lugar errado (por exemplo, fora de setup()
). Este método foi concebido para ser usado por bibliotecas que querem usar inject()
internamente sem disparar um aviso ao utilizador final.
Tipo
tsfunction hasInjectionContext(): boolean