npm i -s vue-property-decorator
1,@Component(options:ComponentOptions = {})
@Component 裝飾器可以接收一個對象作為參數,可以在對象中聲明 components ,filters,directives 等未提供裝飾器的選項
雖然也可以在 @Component 裝飾器中聲明 computed,watch 等,但并不推薦這么做,因為在訪問 this 時,編譯器會給出錯誤提示
import { Vue, Component } from 'vue-property-decorator'@Component({ filters: { toFixed: (num: number, fix: number = 2) => { return num.toFixed(fix) } }})export default class MyComponent extends Vue { public list: number[] = [0, 1, 2, 3, 4] get evenList() { return this.list.filter((item: number) => item % 2 === 0) }}2,@Prop(options: (PropOptions | Constructor[] | Constructor) = {})
@Prop 裝飾器接收一個參數,這個參數可以有三種寫法:
Constructor ,例如 String,Number,Boolean 等,指定 prop 的類型; Constructor[] ,指定 prop 的可選類型; PropOptions ,可以使用以下選項: type,default,required,validator 。import { Vue, Component, Prop } from 'vue-property-decorator'@Componentexport default class MyComponent extends Vue { @Prop(String) propA: string | undefined @Prop([String, Number]) propB!: string | number @Prop({ type: String, default: 'abc' }) propC!: string}等同于下面的 js 寫法
export default { props: { propA: { type: Number }, propB: { default: 'default value' }, propC: { type: [String, Boolean] } }}注意:
屬性的ts類型后面需要加上 undefined 類型;或者在屬性名后面加上!,表示 非null 和 非undefined 的斷言,否則編譯器會給出錯誤提示; 指定默認值必須使用上面例子中的寫法,如果直接在屬性名后面賦值,會重寫這個屬性,并且會報錯。3,@PropSync(propName: string, options: (PropOptions | Constructor[] | Constructor) = {})
@PropSync 裝飾器與 @prop 用法類似,二者的區別在于: @PropSync 裝飾器接收兩個參數:propName: string 表示父組件傳遞過來的屬性名; 
options: Constructor | Constructor[] | PropOptions 與 @Prop 的第一個參數一致;
@PropSync 會生成一個新的計算屬性。
import { Vue, Component, PropSync } from 'vue-property-decorator'@Componentexport default class MyComponent extends Vue { @PropSync('propA', { type: String, default: 'abc' }) syncedPropA!: string}等同于下面的 js 寫法
export default { props: { propA: { type: String, default: 'abc' } }, computed: { syncedPropA: { get() { return this.propA }, set(value) { this.$emit('update:propA', value) } } }}            
新聞熱點
疑難解答
圖片精選