• vue-property-decorator使用指南


    在Vue中使用TypeScript时,非常好用的一个库,使用装饰器来简化书写。

    1、安装npm i -S vue-property-decorator

    2、@Component

    即使没有组件也不能省略@Component,否则会报错。

    import {Component,Vue} from 'vue-property-decorator';
    import {componentA,componentB} from '@/components';
    
     @Component({
        components:{
            componentA,
            componentB,
        },
        directives: {
            focus: {
                // 指令的定义
                inserted: function (el) {
                    el.focus()
                }
            }
        }
    })
    export default class YourCompoent extends Vue{
       
    }

    3、@Prop 父子组件之间值的传递

    @Prop(options: (PropOptions | Constructor[] | Constructor) = {}) decorator

    import { Vue, Component, Prop } from 'vue-property-decorator'
     
    @Component
    export default class YourComponent extends Vue {
      @Prop(Number) readonly propA: number | undefined
      @Prop({ default: 'default value' }) readonly propB!: string
      @Prop([String, Boolean]) readonly propC: string | boolean | undefined
      @Prop([String,Number]) propB:string|number;
      @Prop({
        type: String,// type: [String , Number]
        default: 'default value', // 一般为String或Number
        //如果是对象或数组的话。默认值从一个工厂函数中返回
        // defatult: () => {
          // return ['a','b']
        // }
        required: true,
         validator: (value) => { return [ 'InProcess', 'Settled' ].indexOf(value) !== -1 } }) propC:string;
    }

    注意title参数中的感叹号。如果需要设置为true或者有默认道具,我只使用它。如果没有,那么你应该使用| undefined。

    “明确的赋值断言是一个特性,允许在实例属性和变量声明之后放置!以向TypeScript传递一个变量确实被分配用于所有意图和目的,即使TypeScript的分析无法检测到它。”

    @Componentexport default class MyComponent extends Vue {
      @Prop({ required: true }) title!: string
      @Prop() optionalItem: string|undefined
    }

    4、@Emit

    @Emit(event?: string) decorator

    import { Vue, Component, Emit } from 'vue-property-decorator'
     
    @Component
    export default class YourComponent extends Vue {
      count = 0
     
      @Emit()
      addToCount(n: number) {
        this.count += n
      }
     
      @Emit('reset')
      resetCount() {
        this.count = 0
      }
     
      @Emit()
      returnValue() {
        return 10
      }
     
      @Emit()
      onInputChange(e) {
        return e.target.value
      }
     
      @Emit()
      promise() {
        return new Promise(resolve => {
          setTimeout(() => {
            resolve(20)
          }, 0)
        })
      }
    }

    5、@Watch

    @Watch(path: string, options: WatchOptions = {}) decorator

    import { Vue, Component, Watch } from 'vue-property-decorator'
     
    @Component
    export default class YourComponent extends Vue {
      @Watch('child')
      onChildChanged(val: string, oldVal: string) {}
     
      @Watch('person', { immediate: true, deep: true })
      onPersonChanged1(val: Person, oldVal: Person) {}
     
      @Watch('person')
      onPersonChanged2(val: Person, oldVal: Person) {}
    }

    其它详见文档

  • 相关阅读:
    Ftp、Ftps与Sftp之间的区别
    Previous Workflow Versions in Nintex Workflow
    Span<T>
    .NET Core 2.0及.NET Standard 2.0 Description
    Announcing Windows Template Studio in UWP
    安装.Net Standard 2.0, Impressive
    SQL 给视图赋权限
    Visual Studio for Mac中的ASP.NET Core
    How the Microsoft Bot Framework Changed Where My Friends and I Eat: Part 1
    用于Azure功能的Visual Studio 2017工具
  • 原文地址:https://www.cnblogs.com/gxp69/p/11212395.html
Copyright © 2020-2023  润新知