• vue中使用vue-class-component写TS


    vue上所有生命周期中的钩子方法里(如created,mounted,updated)使用this,this指向调用它的vue实例 (new Vue),this的指向会影响ts的类型推断,为了更好地用class的模式来写vue组件。
    vue-class-component 带来了很多遍历 官网
    1.methods,钩子都可以直接写作class的方法
    2.computed属性可以直接通过get来获得
    3.初始化data可以声明为class的属性
    4.其他的都可以放到Component装饰器里
    vue-property-decorator深度依赖了vue-class-component,拓展出了更多操作符:@Prop、@Emit、@Inject、@Model、@Provide、@Watch;等可以写在class里面

    创建组件的方式

    import { Component, Prop, Vue, Watch } from 'vue-property-decorator';
    
    @Component 
    export default class Test extends Vue {
    
    }
    

    data对象(可以直接声明为class的属性)

    export default class Test extends Vue {
      private name: string;
    }
    

    prop声明(两种方式)

    import { Component, Prop, Vue, Watch } from 'vue-property-decorator';
    
    @Component({
        mixins: [],
        // props传值(方法一)
        props: {
            firstName: String,
            lastName: String
        },
        // 注册组件
        components: {
            'component-a': ComponentA
        }
    })
    export default class Test extends Vue {
    // props传值(方法二)
    @Prop({ default: "test" }) private label!: string;
    }
    
    

    method方法(直接写作class的方法)

    public func(): void {
      console.log(this.name)
    }
    

    watch 属性监听

    // immediate 立即触发
    @Watch("$route", { immediate: true })
    private onRouteChange(route: Route) {
      const query = route.query as Dictionary<string>; // ts类型断言
      if (query) {
      this.redirect = query.redirect;
      }
    }
    
    • @Watch(path: string, options: WatchOptions = {})
      options 包含两个属性 immediate?:boolean 侦听开始之后是否立即调用该回调函数 / deep?:boolean 被侦听的对象的属性被改变时,是否调用该回调函数

    • @Watch('arr', { immediate: true, deep: true }) onArrChanged(newValue: number[], oldValue: number[]) {}

    computed 计算属性(computed属性可以直接通过get来获得)

    public get allname() {
      return 'computed ' + this.name;
    }
    // allname 是计算后的值,name 是被监听的值
    

    生命周期函数

    public created(): void {
      console.log('created');
    }
    
    public mounted():void{
      console.log('mounted')
    }
    

    emit 事件

    import { Vue, Component, Emit } from 'vue-property-decorator'
    @Component
    export default class MyComponent extends Vue {
      count = 0
      @Emit()
      addToCount(n: number) {
          this.count += n
      }
    }
    
  • 相关阅读:
    Poi之Word文档结构介绍
    Cannot create PoolableConnectionFactory (ORA-28040: No matching authentication protocol
    ZipFile和ZipInputSteam解压zip文件
    Java读取其他jar包里的配置文件
    安装oracle后不能连接问题
    JDBC oracle 错误总结
    vimplugin破解
    SQL之left join、right join、inner join
    ELK之安装searchguard后默认管理员用户admin修改
    CentOS使用systemctl daemon-reload报错Error getting authority: Error initializing authority: Error calling StartServiceByName for org.freedesktop.PolicyKit1: Timeout was reached (g-io-error-quark, 24)解决办法
  • 原文地址:https://www.cnblogs.com/whkl-m/p/15012419.html
Copyright © 2020-2023  润新知