美文网首页前端内容
vue-property-decorator

vue-property-decorator

作者: Timmy小石匠 | 来源:发表于2019-12-31 17:34 被阅读0次

    一、首先 下载

    npm install vue-class-component vue-property-decorator --save-dev
    

    二、vue-class-component 和 vue-property-decorator 的区别与联系

    • vue-property-decorator社区出品;vue-class-component官方出品

    • vue-class-component提供了Vue、Component等;

    • vue-property-decorator深度依赖了vue-class-component,拓展出了更多操作符:@Prop、@Emit、@Inject、@Model、@Provide、@Watch;

    三 、开发时正常引入vue-property-decorator就行

    1. 引入后写vue代码就是如此,
    import {Component, Prop, Vue} from 'vue-property-decorator'
    
    @Component
    export default class App extends Vue {
      name:string = 'Simon Zhang'
    
      // computed
      get MyName():string {
        return `My name is ${this.name}`
      }
    
      // methods
      sayHello():void {
        alert(`Hello ${this.name}`)
      }
    
      mounted() {
        this.sayHello();
      }
    }
    

    相当于

    export default {
      data () {
        return {
          name: 'Simon Zhang'
        }
      },
    
      mounted () {
        this.sayHello()
      },
    
      computed: {
        MyName() {
          return `My name is ${this.name}`
        }
      },
    
      methods: {
        sayHello() {
          alert(`Hello ${this.name}`)
        },
      }
    }
    

    四、总结

    1、写法问题:引入组件和接收父组件传过来的参数

    @Component({
      components: {
        XXXX
      },
      props: {
        mapFlag: Number
      }
    })
    

    2、获取refs,在其后面加上as HTMLDivElement(不知道是不是这插件引起的,懒得管,直接干就是)

    let layoutList:any = this.$refs.layout as HTMLDivElement
    或
    let fieldCalculate:any = (this as any).$refs.fieldCalculate
    

    3、ts文件 公用方法导出

    const xxx = (value: any, type: string) => {
      ...
    }
    export { xxx, xxx, xxx, xxx }
    

    4、引入装饰器,使用方式@Watch

    import { Component, Prop, Watch, Emit } from 'vue-property-decorator'
    

    5、引用插件。在shims-vue.d.ts 文件中声明,再在组件中引用

    declare module 'vuedraggable' {
      const vuedraggable: any;
      export default vuedraggable;
    }
    

    6、@Watch使用

    // 监听formula 其变化则显示验证公式按钮

        @Watch('formula', { deep: true, immediate: true }) formulaWatch (newVal:string, oldVal:string) {
          if (newVal !== oldVal) {
           this.grammarSuccess = true
           this.errMsgFlag = false
           this.checkFormulaSuccess = false
          }
        }
    

    7、计算属性方法写法(跟@watch一样,当成方法写就行;加一个关键字get)

    get aTagDatasFcomput () {
     // computed计算属性, 过滤出visible为true的对象来渲染,
    因为当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级,这意味着 v-if 将分别重复运行于每个 v-for 循环中
          return this.aTagDatasF.filter(item => item.visible)
    }
    

    8、@Prop的用法

    @Prop({
          type: Boolean, // 父组件传递给子组件的数据类型
          required: false, // 是否必填
          default: false // 默认值, 如果传入的是 Object,则要 default: ()=>({}) 参数为函数
      }) collapsed !: boolean
    @Prop()private datas!: any
    感叹号是非null和非undefined的类型断言,所以上面的写法就是对datas这个属性进行非空断言
    

    9、ts设置html的fontSize

    let docEl = document.documentElement as HTMLDivElement // 加上 as HTMLDivElement
    

    获取时:(不加会报错Object is possibly 'null'. 真是一波骚操作)

    相关文章

      网友评论

        本文标题:vue-property-decorator

        本文链接:https://www.haomeiwen.com/subject/ntlktctx.html