vue-property-decorator基础教程

  • 为什么要使用vue-property-decorator
  • 如何使用vue-property-decorator
    • 1. 基本写法
    • 2. data中定义数据
    • 3.生命周期钩子函数
    • 4. 方法
    • 5. @Component()
    • 6. @Prop()
    • 7. @PropSync()
    • 8. @Emit()
    • 9. 计算属性
    • 10. @Watch()

为什么要使用vue-property-decorator

vue-property-decorator是在vue-class-component的基础上做了进一步的封装,在TypeScript官方文档 中,官方推荐了vue-class-component,提供了Vue,Component等,而vue-property-decorator是社区出品,深度依赖于vue-class-component,提供了更多操作符:@Component,@Prop,@Watch,@Emit……

如何使用vue-property-decorator

1. 基本写法

template和css的写法不变,只是script内的写法需要注意

<script lang='ts'>
import {Component, Vue} from vue-property-decorator;
@Component
export default class App extends Vue {};
</script>

lang="ts":script声明当前语言是ts
@Component:注明此类为一个vue组件
export default class Test extends Vue: export当前组件类是继承vue的

2. data中定义数据

data中的数据由原来的data()方法改成直接在对象中定义,data内的属性直接作为实例属性书写,默认都是public公有属性

export default class App extends Vue {private msg1 : string = '123';private msg2 : number = 1;
}

3.生命周期钩子函数

export default class App extends Vue {private created(){this.init();}
}

4. 方法

export default class App extends Vue {private init(){console.log('init');}
}

5. @Component()

<script lang="ts">
@Component({components: {HelloWorld, // 声明子组件的引用}
})
export default class App extends Vue {}
</script>

6. @Prop()

参数可以传

  • Constructor 例如String, Number, Boolean
  • Constructor[], 构造函数的队列, 类型在这队列中即可
  • PropOptions
    • type 类型不对会报错 Invalid prop: type check failed for prop “xxx”. Expected Function, got String with value “xxx”.
    • default 如果父组件没有传的话为该值, 注意只能用这一种形式来表示默认值, 不能@Prop() name = 1来表示默认值 1, 虽然看起来一样, 但是会在 console 里报错, 不允许修改 props 中的值
    • required 没有会报错 [Vue warn]: Missing required prop: “xxx”
    • validator 为一个函数, 参数为传入的值, 比如(value) => value > 100
@Prop()
propA: string@Prop()
propB: number@Prop({type: Number,validator: (value) => {return value > 100;},required: true
}) private propC!: string // !表示有值, 否则 ts 会告警未初始化@Prop({ default: 'this is title',required: true
}) propD!: string; // !表示有值, 否则 ts 会告警未初始化@Prop({ default: true,required: true
}) propE: boolean | undefined;

7. @PropSync()

与 Prop 的区别是子组件可以对 props 进行更改, 并同步给父组件
子组件

<template><div><p>{{count}}</p><button @click="innerCount += 1">increment</button></div>
</template><script lang="ts">
@Component
export default class PropSyncComponent extends Vue {@PropSync('count') private innerCount!: number // 注意@PropSync 里的参数不能与定义的实例属性同名, 因为还是那个原理, props 是只读的.
}
</script>

父组件:注意父组件里绑定 props 时需要加修饰符 .sync

<template><PropSyncComponent :count.sync="count"/>
</template>
<script lang="ts">
@Component({components: PropSyncComponent
})
export default class PropSyncComponent extends Vue {@PropSync('count') private innerCount!: number // 注意@PropSync 里的参数不能与定义的实例属性同名, 因为还是那个原理, props 是只读的.
}
</script>

8. @Emit()

定义emit事件,参数字符串表示分发的事件名,如果没有,则使用方法名作为分发事件名,会自动转连字符写法:

  1. @Emit()不传参数,那么它触发的事件名就是它所修饰的函数名.
  2. @Emit(name: string),里面传递一个字符串,该字符串为要触发的事件名.

js写法

export default {data() {return {count: 0}},methods: {addToCount(n) {this.count += nthis.$emit('add-to-count', n)},resetCount() {this.count = 0this.$emit('reset')},returnValue() {this.$emit('return-value', 10)},promise() {const promise = new Promise(resolve => {setTimeout(() => {resolve(20)}, 0)})promise.then(value => {this.$emit('promise', value)})}}
}

ts写法

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()promise() {return new Promise(resolve => {setTimeout(() => {resolve(20)}, 0)})}
}

9. 计算属性

对于Vue中的计算属性,我们只需要将该计算属性名定义为一个函数,,在函数前加上get关键字即可,原本Vue中的computed里的每个计算属性都变成了在前缀添加get的函数。

public get computedMsg(){return '这里是计算属性' + this.message;
}
public set computedMsg(message: string){}

10. @Watch()

监听属性发生更改时被触发. 可接受配置参数 options

  1. immediate: boolean 是否在侦听开始之后立即调用该函数
  2. deep: boolean 是否深度监听.
import { Vue, Component, Watch } from vue-property-decorator;export default class App extends Vue {@Watch('child')onChangeChildValue(newValue: string, oldValue: string){......todo}@Watch('parent', {immediate: true, deep: false})private onChangeParentValue(newValue: string, oldValue: string){......todo}
}

vue-property-decorator相关推荐

  1. Python中的@property Decorator:其用例,优点和语法

  2. Vue,React,微信小程序,快应用,TS 和 Koa 一把梭

    前言 前端生态越来越繁华,随着资本寒冬的来临,对前端招聘要求也变高了: 本文将从项目出发由浅入深做一个Vue,React,微信小程序,快应用,TS和 Koa的知识大串联: 相当于一篇文章搞定前端目前主 ...

  3. Vue脚手架创建TS项目

    What is TS? TS语言,也就是TypeScript,是前端一个非常强大的语言超集,基于JavaScript. TS的强大吸引了许许多多的前端开发者学习使用. TS最大的特点,就是在JavaS ...

  4. vue: vue2.0 + ts + vuex 项目

    使用ts有三种方式创建组件 option api (Vue.extend({})这种方式,而不是exportdefault{}) class api (见下面) class api + decorat ...

  5. Vue.js + Vuex + TypeScript 实战项目开发与项目优化

    技术栈: Vue.js + Vuex + TypeScript Todo List: 使用Vue CLI初始化项目 调整初始目录结构 删除初始化的默认文件(对于我们项目是多余的组件components ...

  6. python property装饰器原理,Python @property装饰器不起作用

    Could anyone find a problem with this @property decorator? I cannot seem to get it to assert correct ...

  7. 基于vue和elementUI封装框选表格组件

    前言:主要是 table 表格框选功能 实现功能如下: 表格框选功能 右键操作功能(删除.查看.编辑) 分页功能 表头分类筛选功能 回显功能(显示默认选中数据) 排序功能 行禁用不可选功能 不说废话, ...

  8. @property的必要性

    文章[1]的作者提到: What will we do if we need to control access to x, make it read-only or do something els ...

  9. Angular input decorator学习笔记

    https://angular.io/api/core/Input Input decorator只能用在Angular class字段里, 用于指定元数据,将class字段指定成input prop ...

  10. 手机怎么安装py thon_Python属性装饰器– Py​​thon @property

    手机怎么安装py thon Hello friends, today we will learn about Python property decorator. In our previous tu ...

最新文章

  1. iOS中 HTTP/Socket/TCP/IP通信协议详解 韩俊强的博客
  2. Swift实现CoreData存储数据
  3. 关于“习惯”的精彩分析
  4. 成为Java流大师–第4部分:数据库流
  5. 2018 蓝桥杯省赛 B 组模拟赛(一)H.封印之门 最短路
  6. 英语学习笔记2019-11-29
  7. selenium中,运行测试用例,报NosuchElementException错误,用try --except 捕获异常
  8. list 分页_mybatis一对多分页查询
  9. php 检测移动设备,Github项目Mobile-Detect-检测移动设备的php类
  10. spring mybatis 项目源码
  11. NN求解NS方程进一步探讨
  12. C#学习笔记五——选择文件、文件夹操作
  13. UWB定位原理详细介绍
  14. Ensembl数据库简介
  15. word自动生成目录,设置从指定页码开始
  16. 记录LM3886制作辛酸历程
  17. uniapp如何使用uview中的loadmore上拉加载
  18. 为什么直到YOY小黄仓的出现,我们的消费积分才能最大利用呢?
  19. 怎么在Mac上修复问题硬盘
  20. 【笑小枫的SpringBoot系列】【六】SpringBoot日志打印Logback详解

热门文章

  1. 中介效应调节效应分析对比及操作详解
  2. 109.数组中的最长山脉
  3. 淘宝运营之:店铺信用分计算规则
  4. calib matlab,toolbox_calib 图片处理,各种用于 的.M文件,非常适 初学者。 matlab 242万源代码下载- www.pudn.com...
  5. switch:欢迎进入迷你游戏平台,选择你喜爱的游戏
  6. Android APP微信第三方登录踩坑 - 微信开放平台修改应用包名后微信第三方登录失败
  7. 路由器和交换机哪个更好?路由器交换机怎么连接?
  8. jenkins 国内插件源无效问题的解决方案
  9. 脉聊社交网站源码类似微博的社交源码 模板UI非常漂亮自适应手机版 重点是有原生APP
  10. iPhone模拟器截图