API da Aplicação
createApp()
Cria uma instância da aplicação.
Tipo
tsfunction createApp(rootComponent: Component, rootProps?: object): App
Detalhes
O primeiro argumento é o componente raiz. O segundo argumento são propriedades opcionais a serem passadas ao componente raiz.
Exemplo
Com o componente raiz em linha:
jsimport { createApp } from 'vue' const app = createApp({ /* opções do componente raiz */ })
Com o componente importado:
jsimport { createApp } from 'vue' import App from './App.vue' const app = createApp(App)
Consulte também: Guia - Criando uma Aplicação de Vue
createSSRApp()
Cria uma instância da aplicação no modo de Hidratação SSR. A forma de uso é exatamente igual à createApp()
.
app.mount()
Monta a instância da aplicação em um elemento contentor.
Tipo
tsinterface App { mount(rootContainer: Element | string): ComponentPublicInstance }
Detalhes
O argumento pode ser tanto o elemento real do DOM ou um seletor CSS (o primeiro elemento compatível será usado). Retorna a instância do componente raiz.
Se o componente tem um modelo de marcação ou uma função de interpretação definida, ele substituirá qualquer nódulo do DOM existente dentro do contentor. Caso contrário, se o compilador de tempo de execução estiver disponível, a
innerHTML
do contentor será usado como modelo.No modo de hidratação de SSR, ele hidratará os nódulos DOM existentes dentro do contentor. Se houverem disparidades, os nódulos DOM existentes serão transformados para corresponder ao resultado esperado.
O
mount()
poderá ser chamado apenas uma vez para cada instância da aplicação.Exemplo
jsimport { createApp } from 'vue' const app = createApp(/* ... */) app.mount('#app')
Também se pode montar em um elemento DOM real:
jsapp.mount(document.body.firstChild)
app.unmount()
Desmonta uma instância de aplicação montada, disparando os gatilhos do ciclo de vida para todos os componentes na árvore de componentes da aplicação.
Tipo
tsinterface App { unmount(): void }
app.component()
Regista um componente global ao passar um nome como string e uma definição de componente, ou busca um componente já registado se apenas o nome é passado.
Tipo
tsinterface App { component(name: string): Component | undefined component(name: string, component: Component): this }
Exemplo
jsimport { createApp } from 'vue' const app = createApp({}) // regista um objeto com opções app.component('my-component', { /* ... */ }) // busca um componente registado const MyComponent = app.component('my-component')
Consulte também: Registo de Componente
app.directive()
Regista uma diretiva global personalizada se passar uma sequência de caracteres de nome e uma definição de diretiva, ou buscar uma já registada se apenas o nome for passado.
Tipo
tsinterface App { directive(name: string): Directive | undefined directive(name: string, directive: Directive): this }
Exemplo
jsimport { createApp } from 'vue' const app = createApp({ /* ... */ }) // registar (objeto da diretiva) app.directive('my-directive', { /* gatilhos personalizados da diretiva */ }) // registar (atalho da função diretiva) app.directive('my-directive', () => { /* ... */ }) // busca uma diretiva registada const myDirective = app.directive('my-directive')
Consulte também: Diretivas Personalizadas
app.use()
Instala uma extensão.
Tipo
tsinterface App { use(plugin: Plugin, ...options: any[]): this }
Detalhes
Exige a extensão como primeiro argumento, e opcionalmente configurações da extensão como segundo argumento.
A extensão pode tanto ser um objeto com um método
install()
, ou apenas uma função que será usada como o métodoinstall()
. As opções (segundo argumento doapp.use()
) serão passadas através do métodoinstall()
da extensão.Quando
app.use()
for chamado com a mesma extensão múltiplas vezes, a extensão será instalada apenas uma vez.Exemplo
jsimport { createApp } from 'vue' import MyPlugin from './plugins/MyPlugin' const app = createApp({ /* ... */ }) app.use(MyPlugin)
Consulte também: Extensões
app.mixin()
Aplica uma mistura global (isolada à aplicação). Uma mistura global aplica suas opções incluídas à toda instância de componente na aplicação.
Não Recomendado
Misturas são suportadas na Vue 3 principalmente para compatibilidade retroativa, devido ao seu uso difundido nas bibliotecas do ecossistema. O uso de misturas, especialmente misturas globais, deve ser evitado no código da aplicação.
Para reutilização de lógica, prefira as Funções de Composição.
Tipo
tsinterface App { mixin(mixin: ComponentOptions): this }
app.provide()
Fornece um valor que pode ser injetado em todos os componentes descendentes dentro da aplicação.
Tipo
tsinterface App { provide<T>(key: InjectionKey<T> | symbol | string, value: T): this }
Detalhes
Exige a chave de injeção como primeiro argumento, e o valor fornecido como o segundo. Retorna a própria instância da aplicação.
Exemplo
jsimport { createApp } from 'vue' const app = createApp(/* ... */) app.provide('message', 'olá')
Dentro de um componente na aplicação:
jsimport { inject } from 'vue' export default { setup() { console.log(inject('message')) // 'olá' } }
Consulte também:
app.runWithContext()
Executa uma função de resposta com a aplicação atual como contexto de injeção.
Tipo
tsinterface App { runWithContext<T>(fn: () => T): T }
Detalhes
Espera uma função de resposta e executa a função de resposta imediatamente. Durante a chamada síncrona da função de resposta, as chamadas de
inject()
são capazes de procurar as injeções a partir dos valores fornecidos pela aplicação atual, mesmo quando não existir nenhuma instância de componente ativa atualmente. O valor de retorno da função de resposta também será retornado.Exemplo
jsimport { inject } from 'vue' app.provide('id', 1) const injected = app.runWithContext(() => { return inject('id') }) console.log(injected) // 1
app.version
Fornece a versão da Vue com que a aplicação foi criada. Isto é útil dentro de extensões, onde podemos precisar de lógica condicional baseada em diferentes versões da Vue.
Tipo
tsinterface App { version: string }
Exemplo
Realizando uma verificação da versão dentro de uma extensão:
jsexport default { install(app) { const version = Number(app.version.split('.')[0]) if (version < 3) { console.warn('Esta extensão exige a Vue 3') } } }
Consulte também: API Global - versão
app.config
Toda instância da aplicação expõe um objeto config
que contém as definições de configuração para aquela aplicação. Nós podemos modificar estas propriedades (documentadas abaixo) antes de montar a nossa aplicação.
js
import { createApp } from 'vue'
const app = createApp(/* ... */)
console.log(app.config)
app.config.errorHandler
Atribui um manipulador global para erros não capturados que se propagam a partir de dentro da aplicação.
Tipo
tsinterface AppConfig { errorHandler?: ( err: unknown, instance: ComponentPublicInstance | null, // `info` é uma informação de erro específica da Vue, // e.g. em qual gatilho do ciclo de vida o erro foi lançado info: string ) => void }
Detalhes
O manipulador do erro recebe três argumentos: o erro, a instância do componente que disparou o erro, e uma sequência de caracteres de informação especificando o tipo da fonte do erro.
Ele pode capturar erros das seguintes fontes:
- Interpretação de componente
- Manipuladores de evento
- Gatilhos de Ciclo de Vida
- Função
setup()
- Observadores
- Gatilhos personalizados de diretiva
- Gatilhos de transição
DICA
Em produção, o terceiro argumento (
info
) será um código encurtado ao invés da sequência de caracteres da informação completa. Nós podemos encontrar o código ao mapeamento da sequência de caracteres na Referência do Código de Erro de Produção.Exemplo
jsapp.config.errorHandler = (err, instance, info) => { // manipular o erro, por exemplo, informar para um serviço }
app.config.warnHandler
Atribui um manipulador personalizado para avisos de tempo de execução da Vue.
Tipo
tsinterface AppConfig { warnHandler?: ( msg: string, instance: ComponentPublicInstance | null, trace: string ) => void }
Detalhes
O manipulador de avisos recebe uma mensagem de aviso como primeiro argumento, a instância do componente fonte como segundo argumento, e uma string de rastro de componentes como terceiro.
Pode ser usado para filtrar avisos específicos a fim de reduzir a verbosidade no console. Todos os avisos da Vue devem ser abordados durante o desenvolvimento, então isto é recomendado apenas durante sessões de depuração para focar em avisos específicos entre muitos, e deve ser removido uma vez que a depuração tenha sido finalizada.
DICA
Avisos funcionam apenas durante o desenvolvimento, então esta configuração é ignorada no modo de produção.
Exemplo
jsapp.config.warnHandler = (msg, instance, trace) => { // `trace` é o rastro da hierarquia de componentes }
app.config.performance
Defina isto para true
para ativar o rastreio do desempenho do remendo, desenho, compilação e inicialização do componente no painel de desempenho ou linha do tempo da ferramenta de programação do navegador. Funciona apenas no modo de desenvolvimento e em navegadores que suportam a API performance.mark
.
Tipo:
boolean
Consulte também: Guia - Desempenho
app.config.compilerOptions
Configura opções do compilador de tempo de execução. Os valores definidos neste objeto serão passados para o compilador de modelos de marcação no navegador e afetarão todo componente na aplicação configurada. Observe que podemos sobrepor estas opções com base num componente usando a opção compilerOptions
.
IMPORTANTE
Esta opção da configuração é respeitada apenas quando usasse a construção completa (por exemplo, o vue.js
autónomo que pode compilar modelos de marcação no navegador). Se estivermos usando uma construção que executa apenas no tempo de execução com uma configuração de construção, as opções do compilador devem ser passadas para o @vue/compiler-dom
através das configurações da ferramenta de construção.
Para
vue-loader
: passamos através da opção do carregadorcompilerOptions
. Consulte também como configurá-lo navue-cli
.Para
vite
: passamos através das opções@vitejs/plugin-vue
.
app.config.compilerOptions.isCustomElement
Especifica um método de verificação para reconhecer elementos personalizados nativos.
Tipo:
(tag: string) => boolean
Detalhes
Deve retornar
true
se o marcador deve ser tratado como elemento personalizado nativo. Para um marcador correspondente, a Vue interpretará como um elemento nativo ao invés de tentar resolvê-lo como um componente de Vue.Os marcadores de HTML e SVG nativos não precisam ser correspondidos nesta função - o analisador da Vue reconhece-os automaticamente.
Exemplo
js// tratar todos marcadores começando com // 'ion-' como elementos personalizados app.config.compilerOptions.isCustomElement = (tag) => { return tag.startsWith('ion-') }
Consulte também: Vue e os Componentes da Web
app.config.compilerOptions.whitespace
Ajusta o tratamento de espaço em branco do modelo de marcação.
Tipo:
'condense' | 'preserve'
Padrão:
'condense'
Detalhes
A Vue remove ou condensa os caracteres de espaço em branco nos modelos de marcação para produzir uma saída compilada mais eficiente. A estratégia padrão é "condensar", com o seguinte comportamento:
- Caracteres de espaço em branco iniciais ou finais dentro de um elemento são condensados em um único espaço.
- Caracteres de espaço em branco entre elementos que contêm novas linhas são removidos.
- Caracteres de espaço em branco consecutivos em nódulos de texto são condensados em um único espaço.
A definição desta opção para
'preserve'
desativará os itens (2) e (3) acima.Exemplo
jsapp.config.compilerOptions.whitespace = 'preserve'
app.config.compilerOptions.delimiters
Ajusta os delimitadores usados para a interpolação de texto dentro do modelo de marcação.
Tipo:
[string, string]
Padrão:
['{{', '}}']
Detalhes
Isto é normalmente usado para evitar conflitos com abstrações do lado do servidor que também podem usar a sintaxe de bigodes ou chavetas.
Exemplo
js// Delimitadores modificados para o // estilo de sequência de caracteres de modelo da ES6 app.config.compilerOptions.delimiters = ['${', '}']
app.config.compilerOptions.comments
Ajusta o tratamento de comentários HTML nos modelos de marcação.
Tipo:
boolean
Padrão:
false
Detalhes
Por padrão, a Vue removerá todos os comentários em produção. A definição desta opção para
true
forçará a Vue a preservar os comentários até em produção. Os comentários são sempre preservados durante o desenvolvimento. Esta opção é normalmente usada para quando a Vue for usada com outras bibliotecas que dependem de comentários de HTML.Exemplo
jsapp.config.compilerOptions.comments = true
app.config.globalProperties
Um objeto pode ser usado para registar propriedades globais que podem ser acessadas em qualquer instância de componente dentro da aplicação.
Tipo
tsinterface AppConfig { globalProperties: Record<string, any> }
Detalhes
Isto é uma substituição da
Vue.prototype
da Vue 2, que não está mais presente na Vue 3. Como qualquer outra coisa global, isto deve ser usado com moderação.Se uma propriedade global entrar em conflito com uma propriedade de um componente, a propriedade do componente terá maior prioridade.
Uso
jsapp.config.globalProperties.msg = 'olá'
Isto torna
msg
disponível dentro de qualquer modelo de marcação do componente na aplicação, e também nothis
de qualquer instância de componente:jsexport default { mounted() { console.log(this.msg) // 'olá' } }
Consulte também Guia - Aumentando as Propriedades Globais
app.config.optionMergeStrategies
Um objeto para definir estratégias de fusão para opções de componente personalizadas.
Tipo
tsinterface AppConfig { optionMergeStrategies: Record<string, OptionMergeFunction> } type OptionMergeFunction = (to: unknown, from: unknown) => any
Detalhes
Algumas extensões ou bibliotecas adicionam suporte para opções de componente personalizas (injetando misturas globais). Essas opções podem exigir uma lógica de fusão especial quando a mesma opção precisa ser "combinada" de múltiplas fontes (por exemplo, misturas ou herança de componente).
Uma função de estratégia de fusão pode ser registada por uma opção personalizada ao atribuí-la ao objeto
app.config.optionMergeStrategies
usando o nome da opção como chave.A estratégia de fusão recebe o valor da opção definida nas instâncias pai e filho como primeiro e segundo argumentos, respetivamente.
Exemplo
jsconst app = createApp({ // opção própria msg: 'Vue', // opção de uma mistura mixins: [ { msg: 'Olá ' } ], mounted() { // opções combinadas expostas na this.$options console.log(this.$options.msg) } }) // definir uma estratégia de fusão personalizada para `msg` app.config.optionMergeStrategies.msg = (parent, child) => { return (parent || '') + (child || '') } app.mount('#app') // mostra 'Olá Vue'
Consulte também: Instância do Componente -
$options