Cómo escribir componentes basados en clases con Vue.js y TypeScript
Introducción
Vue.js 2 admite componentes de estilo de clase. Si tiene experiencia en Angular (2+), probablemente esté familiarizado con el patrón de escritura de componentes como clases utilizando propiedades y decoradores para describir partes más complejas de su componente.
La mayor ventaja que tienen los componentes de estilo de clase sobre los componentes estándar de Vue.js es que dejan más claro a dónde apunta realmente esto en el componente compilado y permiten un código más conciso.
En este artículo, aprenderá a usar vue-class-component
y vue-property-decorator
admitir TypeScript en componentes basados en clases de Vue.js.
Prerrequisitos
Para seguir este artículo necesitarás:
- Node.js instalado localmente, lo cual puedes hacer siguiendo Cómo instalar Node.js y crear un entorno de desarrollo local .
- Algunos conocimientos sobre la configuración de un proyecto Vue.js y componentes de archivo único .
- Cierta familiaridad con las convenciones de TypeScript .
Este tutorial fue verificado con Node v15.1.0, npm
v6.14.8, Vue.js v2.6.11, TypeScript v3.9.3, @vue/cli
v4.5.0, vue-class-component
v7.2.3 y vue-property-decorator
v8.4.2.
Paso 1: Configuración del proyecto
Necesitarás vue-class-component
instalarlo vue-property-decorator
.
Puedes usar @vue/cli
para crear un nuevo proyecto Vue.js:
- npx @vue/cli create vue-typescript-example
Para los fines de este tutorial, la configuración requerirá:
Inmediato | Opción |
---|---|
Please pick a preset |
Manually select features |
Check the features needed for your project |
TypeScript |
Use class-style component syntax? |
Yes |
@vue/-plugin-typescript
instalará typescript
, vue-class-component
, y vue-property-decorator
.
Luego, navegue hasta el directorio del proyecto:
- cd vue-typescript-example
En este punto, tienes un proyecto Vue.js configurado para TypeScript y componentes de estilo de clase.
Paso 2: escribir un componente de un solo archivo con TypeScript
Un componente de clase es un TypeScript class
que contiene extends
el Vue
objeto. En los componentes de un solo archivo, asegúrese de configurar el script
lenguaje ts
y exportar la clase como default
.
Ábralo App.vue
en su editor de código y cree este componente de archivo único de ejemplo con TypeScript:
origen/App.vue
template div labelUpdate myDataProperty input :value="myDataProperty" @input="updateMyProperty($event)"/ /label div{{ myDataProperty }}/div /div/templatescript lang="ts"import { Component, Vue } from 'vue-property-decorator'@Componentexport default class App extends Vue { // Data property myDataProperty: string = 'Data Property' // Component method updateMyProperty ($event: { target: { value: string } }) { this.myDataProperty = $event.target.value }}/script
Tenga en cuenta que las propiedades de los datos se definen directamente en la clase y los métodos.
El @Component(componentConfig)
decorador es lo que hace que esto sea posible. Transforma la clase en un formato que Vue.js pueda entender durante el proceso de compilación.
En este punto, si compilara y observara su aplicación en un navegador, se le presentaría un campo de entrada y la palabra Data Property
. Al interactuar con el campo de entrada, myDataProperty
se actualizará y reflejará los cambios que se realicen.
Paso 3: Uso de accesorios de componentes
Mediante el uso del @Prop(config)
decorador from vue-property-decorator
, puedes declarar propiedades de entrada de la misma manera que las propiedades de datos.
A continuación se muestra un ejemplo en TypeScript que toma una exampleProperty
propiedad de componente con el valor predeterminado de 'Input Property'
:
origen/App.vue
template div{{ exampleProperty }}/div/templatescriptimport { Component, Prop, Vue } from 'vue-property-decorator'@Componentexport default class App extends Vue { @Prop({ default: 'Input Property' }) exampleProperty!: string}/script
En JavaScript, esto es equivalente a:
export default { props: { exampleProperty: { type: String, default: 'Input Property' } }}
En este punto, si compilaras y observaras tu aplicación en un navegador, se te presentaría el mensaje: Input Property
.
Paso 4: Uso de propiedades calculadas
Las propiedades calculadas se escriben como getters
y setters
en la clase.
A continuación se muestra un ejemplo en TypeScript que get
sa myComputedProp
y devuelve un número aleatorio:
origen/App.vue
template div{{ myComputedProp }}/div/templatescriptimport { Component, Vue } from 'vue-property-decorator'@Componentexport default class App extends Vue { get myComputedProp() { return Math.random() }}/script
En JavaScript, esto es equivalente a:
export default { computed: { myComputedProp() { return Math.random() } }}
En este punto, si compilaras y observaras tu aplicación en un navegador, se te presentaría un número aleatorio.
Paso 5: Uso de observadores
Se pueden crear observadores con el @Watch(propertyString, config)
decorador.
Aquí hay un ejemplo en TypeScript que observa cuándo myWatchedProperty
se activa onPropertyChanged
:
origen/App.vue
template div labelUpdate myWatchedProperty input :value="myWatchedProperty" @input="updateMyProperty($event)"/ /label div{{ myWatchedPropertyStatus }}/div /div/templatescriptimport { Component, Watch, Vue } from 'vue-property-decorator'@Componentexport default class App extends Vue { myWatchedProperty: string = 'Watched Property' myWatchedPropertyStatus: string = '' @Watch('myWatchedProperty') onPropertyChanged(value: string, oldValue: string) { this.myWatchedPropertyStatus = 'Watched Property Changed' } updateMyProperty ($event: { target: { value: string } }) { this.myWatchedProperty = $event.target.value }}/script
En JavaScript, esto es equivalente a:
export default { data() { return { myWatchedProperty: null } } methods: { onPropertyChanged(value, oldValue) { // ... } } watch: { myWatchedProperty: { handler: 'onPropertyChanged', immediate: false, deep: true } }}
En este punto, si compilara y observara su aplicación en un navegador, se le presentaría un campo de entrada. Si cambia el valor de entrada, se mostrará el mensaje Watched Property Changed
.
Conclusión
En este artículo, aprendió cómo usar vue-class-component
y vue-property-decorator
soportar TypeScript en componentes basados en clases de Vue.js.
En este artículo se presentaron @Component
, get
, y set
. Para obtener una lista completa de las declaraciones disponibles en vue-class-component
, consulte la documentación oficial .
En este artículo también se presentaron @Prop
, y @Watch
. Para obtener una lista completa de los decoradores disponibles en vue-property-decorator
, consulte la documentación oficial .
Si desea obtener más información sobre TypeScript, consulte nuestra página de temas de TypeScript para obtener ejercicios y proyectos de programación.
Deja una respuesta