zoukankan      html  css  js  c++  java
  • 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) {}
    }

    其它详见文档

  • 相关阅读:
    Js 验证中文字符长度
    Javascript技巧
    Python GUI编程(Tkinter)
    呆瓜半小时入门python数据分析
    python入门经典_好资源送不停
    pandas.merge数据连接合并
    pandas.DataFrame.sample随机抽样
    kappa系数
    对数损失函数logloss详解和python代码
    信息量_熵_条件熵_相对熵_交叉熵_互信息_信息增益_信息增益比
  • 原文地址:https://www.cnblogs.com/gxp69/p/11212395.html
Copyright © 2011-2022 走看看