vue-class-component对TS的支持 #29
Anuluca Date : 2020-09-07 Tags : 3
1、什么是vue-class-component?
vue-class-component是Vue推出的用于支持TS的装饰库。
import引入:
1 import Component from 'vue-class-component'
2、特点
1、methods
可以直接声明为类成员方法
2、computed
属性可以声明为类属性访问器
3、data
数据可以声明为类属性
4、data render
和所有Vue生命周期 挂钩也可以直接声明为类成员方法,但不能在实例本身上调用它们 。在声明自定义方法时,应避免使用 这些保留名称。
3、使用demo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <script > import Vue from 'vue' import Component from 'vue-class-component' @Component ({ props : { propMessage : String } }) export default class App extends Vue { msg = 123 helloMsg = 'Hello, ' + this .propMessage mounted () { this .greet () } get computedMsg () { return 'computed ' + this .msg } greet () { alert ('greeting: ' + this .msg ) } } </script >
Component.registerHooks
自定义钩子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import Component from 'vue-class-component' Component .registerHooks ([ 'beforeRouteEnter' , 'beforeRouteLeave' , 'beforeRouteUpdate' ]) import Vue from 'vue' import Component from 'vue-class-component' @Component class MyComp extends Vue { beforeRouteEnter (to, from , next) { console .log ('beforeRouteEnter' ) next () } beforeRouteLeave (to, from , next) { console .log ('beforeRouteLeave' ) next () } }
箭头函数
this
为undefined
,
原本使用箭头函数的this
实际上指向的是vue实例
,
但是将箭头函数定义为类属性并在其中访问它,则它将不起作用,this
指向的是vue实例的代理
1 2 3 4 5 6 7 @Component class MyComp extends Vue { foo = 123 bar = () => { this .foo = 456 } }
只要将函数定义为方法,就会自动生成vue实例
1 2 3 4 5 6 7 8 9 @Component class MyComp extends Vue { foo = 123 bar () { this .foo = 456 } }
类属性的undefined没有做出处理
对于一些属性的初始值应该用null或者data钩子进行处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @Component class MyComp extends Vue { foo = undefined bar = null data () { return { baz : undefined } } }