API de la Aplicación
createApp()
Crea una instancia de aplicación.
Tipo
tsfunction createApp(rootComponent: Component, rootProps?: object): AppDetalles
El primer argumento es el componente raíz. El segundo argumento opcional son las
propsque se pasarán al componente raíz.Ejemplo
Con componente raíz en línea:
jsimport { createApp } from 'vue' const app = createApp({ /* root component options */ })Con componente importado:
jsimport { createApp } from 'vue' import App from './App.vue' const app = createApp(App)Ver también Guía - Creando una Aplicación Vue
createSSRApp()
Crea una instancia de aplicación en modo de Hidratación SSR. Su uso es exactamente el mismo que el de createApp().
app.mount()
Monta la instancia de aplicación en un elemento contenedor.
Tipo
tsinterface App { mount(rootContainer: Element | string): ComponentPublicInstance }Detalles
El argumento puede ser un elemento DOM real o un selector CSS (se utilizará el primer elemento coincidente). Devuelve la instancia del componente raíz.
Si el componente tiene una
templateo una función derenderdefinida, reemplazará cualquier nodo DOM existente dentro del contenedor. De lo contrario, si el compilador en tiempo de ejecución está disponible, elinnerHTMLdel contenedor se utilizará comotemplate.En modo de hidratación SSR, hidratará los nodos DOM existentes dentro del contenedor. Si hay desajustes, los nodos DOM existentes se transformarán para coincidir con la salida esperada.
Para cada instancia de
app,mount()solo se puede llamar una vez.Ejemplo
jsimport { createApp } from 'vue' const app = createApp(/* ... */) app.mount('#app')También puede montarse en un elemento DOM real:
jsapp.mount(document.body.firstChild)
app.unmount()
Desmonta una instancia de aplicación montada, activando los hooks del ciclo de vida de desmontaje para todos los componentes en el árbol de componentes de la aplicación.
Tipo
tsinterface App { unmount(): void }
app.onUnmount()
Registra una función de callback para ser llamada cuando la app sea desmontada.
Tipo
tsinterface App { onUnmount(callback: () => any): void }
app.component()
Registra un componente global si se pasa tanto un string de nombre como una definición de componente, o recupera uno ya registrado si solo se pasa el nombre.
Tipo
tsinterface App { component(name: string): Component | undefined component(name: string, component: Component): this }Ejemplo
jsimport { createApp } from 'vue' const app = createApp({}) // registrar un objeto de opciones app.component('MyComponent', { /* ... */ }) // recuperar un componente registrado const MyComponent = app.component('MyComponent')Ver también Registro de Componentes
app.directive()
Registra una directiva personalizada global si se pasa tanto un string de nombre como una definición de directiva, o recupera una ya registrada si solo se pasa el nombre.
Tipo
tsinterface App { directive(name: string): Directive | undefined directive(name: string, directive: Directive): this }Ejemplo
jsimport { createApp } => from 'vue' const app = createApp({ /* ... */ }) // registrar (directiva de objeto) app.directive('myDirective', { /* custom directive hooks */ }) // registrar (atajo de directiva de función) app.directive('myDirective', () => { /* ... */ }) // recuperar una directiva registrada const myDirective = app.directive('myDirective')Ver también Directivas Personalizadas
app.use()
Instala un plugin.
Tipo
tsinterface App { use(plugin: Plugin, ...options: any[]): this }Detalles
Espera el
plugincomo primer argumento, y opciones opcionales delplugincomo segundo argumento.El
pluginpuede ser un objeto con un métodoinstall(), o simplemente una función que se utilizará como métodoinstall(). Las opciones (segundo argumento deapp.use()) se pasarán al métodoinstall()delplugin.Cuando se llama a
app.use()en el mismopluginvarias veces, elpluginse instalará solo una vez.Ejemplo
jsimport { createApp } from 'vue' import MyPlugin from './plugins/MyPlugin' const app = createApp({ /* ... */ }) app.use(MyPlugin)Ver también Plugins
app.mixin()
Aplica un mixin global (con ámbito a la aplicación). Un mixin global aplica sus opciones incluidas a cada instancia de componente en la aplicación.
No Recomendado
Los mixins son compatibles en Vue 3 principalmente por compatibilidad con versiones anteriores, debido a su uso generalizado en las librerías del ecosistema. El uso de mixins, especialmente los mixins globales, debe evitarse en el código de la aplicación.
Para la reutilización de lógica, prefiere Composables en su lugar.
Tipo
tsinterface App { mixin(mixin: ComponentOptions): this }
app.provide()
Proporciona un valor que puede ser inyectado en todos los componentes descendientes dentro de la aplicación.
Tipo
tsinterface App { provide<T>(key: InjectionKey<T> | symbol | string, value: T): this }Detalles
Espera la clave de inyección como primer argumento, y el valor proporcionado como segundo. Devuelve la propia instancia de aplicación.
Ejemplo
jsimport { createApp } from 'vue' const app = createApp(/* ... */) app.provide('message', 'hello')Dentro de un componente en la aplicación:
jsimport { inject } from 'vue' export default { setup() { console.log(inject('message')) // 'hello' } }Ver también
app.runWithContext()
- Solo compatible con 3.3+
Ejecuta una función de callback con la aplicación actual como contexto de inyección.
Tipo
tsinterface App { runWithContext<T>(fn: () => T): T }Detalles
Espera una función de callback y la ejecuta inmediatamente. Durante la llamada síncrona de la función de callback, las llamadas a
inject()pueden buscar inyecciones de los valores proporcionados por la aplicación actual, incluso cuando no hay una instancia de componente activa. El valor de retorno de la función de callback también será devuelto.Ejemplo
jsimport { inject } from 'vue' app.provide('id', 1) const injected = app.runWithContext(() => { return inject('id') }) console.log(injected) // 1
app.version
Proporciona la versión de Vue con la que se creó la aplicación. Esto es útil dentro de plugins, donde podrías necesitar lógica condicional basada en diferentes versiones de Vue.
Tipo
tsinterface App { version: string }Ejemplo
Realizando una verificación de versión dentro de un plugin:
jsexport default { install(app) { const version = Number(app.version.split('.')[0]) if (version < 3) { console.warn('This plugin requires Vue 3') } } }Ver también API Global - version
app.config
Cada instancia de aplicación expone un objeto config que contiene los ajustes de configuración para esa aplicación. Puedes modificar sus propiedades (documentadas a continuación) antes de montar tu aplicación.
js
import { createApp } from 'vue'
const app = createApp(/* ... */)
console.log(app.config)app.config.errorHandler
Asigna un manejador global para errores no capturados que se propagan desde dentro de la aplicación.
Tipo
tsinterface AppConfig { errorHandler?: ( err: unknown, instance: ComponentPublicInstance | null, // `info` is a Vue-specific error info, // e.g. which lifecycle hook the error was thrown in info: string ) => void }Detalles
El manejador de errores recibe tres argumentos: el error, la instancia de componente que lo provocó y un string de información que especifica el tipo de origen del error.
Puede capturar errores de las siguientes fuentes:
- Renderizados de componentes
- Manejadores de eventos
- Hooks del ciclo de vida
- Función
setup() Watchers- Hooks de directivas personalizadas
- Hooks de transición
TIP
En producción, el tercer argumento (
info) será un código acortado en lugar del string de información completo. Puedes encontrar la asignación de código a string en la Referencia de Códigos de Error en Producción.Ejemplo
jsapp.config.errorHandler = (err, instance, info) => { // manejar error, p. ej. reportar a un servicio }
app.config.warnHandler
Asigna un manejador personalizado para las advertencias en tiempo de ejecución de Vue.
Tipo
tsinterface AppConfig { warnHandler?: ( msg: string, instance: ComponentPublicInstance | null, trace: string ) => void }Detalles
El manejador de advertencias recibe el mensaje de advertencia como primer argumento, la instancia del componente de origen como segundo argumento y un string de seguimiento del componente como tercero.
Puede utilizarse para filtrar advertencias específicas y reducir la verbosidad de la consola. Todas las advertencias de Vue deben abordarse durante el desarrollo, por lo que esto solo se recomienda durante las sesiones de depuración para enfocarse en advertencias específicas entre muchas, y debe eliminarse una vez finalizada la depuración.
TIP
Las advertencias solo funcionan durante el desarrollo, por lo que esta configuración se ignora en modo de producción.
Ejemplo
jsapp.config.warnHandler = (msg, instance, trace) => { // `trace` es el seguimiento de la jerarquía de componentes }
app.config.performance
Establece esto en true para habilitar el seguimiento de rendimiento de inicialización, compilación, renderizado y parcheo de componentes en el panel de rendimiento/línea de tiempo de las herramientas de desarrollo del navegador. Solo funciona en modo de desarrollo y en navegadores que admiten la API performance.mark.
Tipo:
booleanVer también Guía - Rendimiento
app.config.compilerOptions
Configura las opciones del compilador en tiempo de ejecución. Los valores establecidos en este objeto se pasarán al compilador de templates en el navegador y afectarán a cada componente de la app configurada. Ten en cuenta que también puedes anular estas opciones por componente utilizando la opción compilerOptions.
Importante
Esta opción de configuración solo se respeta cuando se utiliza la compilación completa (es decir, el vue.js independiente que puede compilar templates en el navegador). Si utilizas la compilación solo en tiempo de ejecución con una configuración de compilación, las opciones del compilador deben pasarse a @vue/compiler-dom a través de las configuraciones de la herramienta de compilación.
Para
vue-loader: pasa a través de la opción del cargadorcompilerOptions. Consulta también cómo configurarlo envue-cli.Para
vite: pasa a través de las opciones de@vitejs/plugin-vue.
app.config.compilerOptions.isCustomElement
Especifica un método de verificación para reconocer elementos personalizados nativos.
Tipo:
(tag: string) => booleanDetalles
Debe devolver
truesi la etiqueta debe tratarse como un elemento personalizado nativo. Para una etiqueta coincidente, Vue la renderizará como un elemento nativo en lugar de intentar resolverla como un componente Vue.Las etiquetas HTML y SVG nativas no necesitan ser emparejadas en esta función; el analizador de Vue las reconoce automáticamente.
Ejemplo
js// tratar todas las etiquetas que comienzan con 'ion-' como elementos personalizados app.config.compilerOptions.isCustomElement = (tag) => { return tag.startsWith('ion-') }Ver también Vue y Componentes Web
app.config.compilerOptions.whitespace
Ajusta el comportamiento del manejo de espacios en blanco en los templates.
Tipo:
'condense' | 'preserve'Valor por defecto:
'condense'Detalles
Vue elimina / condensa los caracteres de espacio en blanco en los templates para producir una salida compilada más eficiente. La estrategia predeterminada es "condense", con el siguiente comportamiento:
- Los caracteres de espacio en blanco iniciales / finales dentro de un elemento se condensan en un solo espacio.
- Los caracteres de espacio en blanco entre elementos que contienen saltos de línea se eliminan.
- Los caracteres de espacio en blanco consecutivos en nodos de texto se condensan en un solo espacio.
Establecer esta opción en
'preserve'deshabilitará (2) y (3).Ejemplo
jsapp.config.compilerOptions.whitespace = 'preserve'
app.config.compilerOptions.delimiters
Ajusta los delimitadores utilizados para la interpolación de texto dentro del template.
Tipo:
[string, string]Valor por defecto:
['{{', '}}']Detalles
Esto se utiliza típicamente para evitar conflictos con
frameworksdel lado del servidor que también utilizan la sintaxis de bigotes (mustache).Ejemplo
js// Delimitadores cambiados al estilo de string de plantilla ES6 app.config.compilerOptions.delimiters = ['${', '}']
app.config.compilerOptions.comments
Ajusta el tratamiento de los comentarios HTML en los templates.
Tipo:
booleanValor por defecto:
falseDetalles
Por defecto, Vue eliminará los comentarios en producción. Establecer esta opción en
trueforzará a Vue a preservar los comentarios incluso en producción. Los comentarios siempre se preservan durante el desarrollo. Esta opción se utiliza típicamente cuando Vue se usa con otras librerías que dependen de los comentarios HTML.Ejemplo
jsapp.config.compilerOptions.comments = true
app.config.globalProperties
Un objeto que se puede utilizar para registrar propiedades globales a las que se puede acceder desde cualquier instancia de componente dentro de la aplicación.
Tipo
tsinterface AppConfig { globalProperties: Record<string, any> }Detalles
Este es un reemplazo del
Vue.prototypede Vue 2, que ya no está presente en Vue 3. Como con cualquier cosa global, esto debe usarse con moderación.Si una propiedad global entra en conflicto con una propiedad propia de un componente, la propiedad propia del componente tendrá mayor prioridad.
Uso
jsapp.config.globalProperties.msg = 'hello'Esto hace que
msgesté disponible dentro de cualquier template del componente en la aplicación, y también enthisde cualquier instancia del componente:jsexport default { mounted() { console.log(this.msg) // 'hello' } }Ver también Guía - Aumentando Propiedades Globales
app.config.optionMergeStrategies
Un objeto para definir estrategias de fusión para opciones de componentes personalizadas.
Tipo
tsinterface AppConfig { optionMergeStrategies: Record<string, OptionMergeFunction> } type OptionMergeFunction = (to: unknown, from: unknown) => anyDetalles
Algunos
plugins/ librerías añaden soporte para opciones de componentes personalizadas (inyectandomixinsglobales). Estas opciones pueden requerir una lógica de fusión especial cuando la misma opción necesita ser "fusionada" de múltiples fuentes (p. ej.mixinso herencia de componentes).Se puede registrar una función de estrategia de fusión para una opción personalizada asignándola al objeto
app.config.optionMergeStrategiesutilizando el nombre de la opción como clave.La función de estrategia de fusión recibe el valor de esa opción definida en las instancias padre e hijo como primer y segundo argumento, respectivamente.
Ejemplo
jsconst app = createApp({ // opción propia msg: 'Vue', // opción de un mixin mixins: [ { msg: 'Hello ' } ], mounted() { // opciones fusionadas expuestas en this.$options console.log(this.$options.msg) } }) // definir una estrategia de fusión personalizada para `msg` app.config.optionMergeStrategies.msg = (parent, child) => { return (parent || '') + (child || '') } app.mount('#app') // registra 'Hello Vue'Ver también Instancia de Componente -
$options
app.config.idPrefix
Configura un prefijo para todos los IDs generados a través de useId() dentro de esta aplicación.
Tipo:
stringValor por defecto:
undefinedEjemplo
jsapp.config.idPrefix = 'myApp'js// en un componente: const id1 = useId() // 'myApp:0' const id2 = useId() // 'myApp:1'
app.config.throwUnhandledErrorInProduction
Fuerza a que los errores no manejados se lancen en modo de producción.
Tipo:
booleanValor por defecto:
falseDetalles
Por defecto, los errores lanzados dentro de una aplicación Vue pero no manejados explícitamente tienen un comportamiento diferente entre los modos de desarrollo y producción:
En desarrollo, el error se lanza y puede posiblemente hacer que la aplicación se bloquee. Esto es para hacer el error más prominente para que pueda ser notado y corregido durante el desarrollo.
En producción, el error solo se registrará en la consola para minimizar el impacto en los usuarios finales. Sin embargo, esto puede evitar que los errores que solo ocurren en producción sean capturados por los servicios de monitoreo de errores.
Al establecer
app.config.throwUnhandledErrorInProductionentrue, los errores no manejados se lanzarán incluso en modo de producción.