vue-property-decorator使我们能在vue组件中写TypeScript语法,依赖于vue-class-component

装饰器:@Component、@Prop、@PropSync、@Model、@ModelSync、@Watch、@Emit、@Ref、@Provide、@Inject、@ProvideReactive、@InjectReactive、@VModel

@Component({})可以声明components、filter、directives等未提供装饰器的vue选项,也可以声明computed、watch、路由守卫函数(beforeRouteEnter、beforeRouteLeave)等

Component.registerHooks(['beforeRouteEnter', 'beforeRouteLeave'])全局注册路由守卫函数

computed在class类中写法:get name(){return '';}

@Prop()参数为prop的类型声明,属性的类型声明需要加上undefined类型或者在属性名后面加上!来断言非null和非undefined

@Prop(String) name!: string | undefined;

@Prop([String, Number]) count!: string | number;

@Prop({type: Number, default: 0, (required、validator)}) age!: number;

@Prop() private name!: string;

@PropSync()接收两个参数:参数一为父组件传递过来的属性名,参数二同@Prop的参数,声明类型,@PropSync会生成一个新的计算属性

在父组件上属性传递需在属性后面加上.sync修饰符(:name.sync="name")

子组件中@PropSync('name', {type: String}) newName!: string;

子组件中值发生变化会双向绑定修改父组件的值

@Model()在组件上自定义v-model语法糖,接收两个参数event: string事件名,options同@Prop的参数

@Model('change', {type: string}) readonly name!: string;

@ModelSync()语法用法同@Model,不同的是接收三个参数,参数一为父组件应用处传递的参数名,参数二为event事件名,参数三为options,@ModelSync()生成返回一个新的双向绑定计算属性

@ModelSync('checked', 'change', {type: Boolean})

readonly checkedValue!: boolean;

@Watch()接收两个参数,参数一为监听的属性名,参数二为一个对象

{immediate?: boolean, deep?: boolean}第一个表示监听开始后是否立即调用回调函数,第二个表示监听的属性变化时是否调用回调函数

@Watch('name')

onNameChanged(newVal: string, oldVal: string){}

@Emit()接收一个可选参数为第一个广播的事件名参数,如果没有提供该参数会将回调函数名的驼峰写法转化为中划线的写法作为广播触发的事件名

@Emit会将回调函数的返回值作为第二个参数,如果返回值为一个Promise对象,emit会在Promise-resolved后触发

@Emit('del') private delEmit(e: MouseEvent){}

@Emit()//省略参数将使用回调函数名,转化为中划线@add-data

addData(data: any){return '';}//如果此处不return,则使用函数参数data

@Ref()可选参数指向模板中的ref属性值,如果没有提供则使用装饰器后面的属性名作为参数

@Ref('ruleForm') private ref!: any;

@Ref('btn') readonly btnRef!: HTMLButtonElement;

@Provide、@Inject、@ProvideReactive、@InjectReactive提供了父子组件、多层嵌套组件以及兄弟组件数据传递的方法

父组件中通过Provide传递数据:

@Provide('foo') foo = 'foo';

子组件中通过Inject获取数据:

@Inject() private foo!: string;

@ProvideReactive、@InjectReactive响应式注入,配对使用

@VModel

@VModel({type: String}) name!: string;

等价于js中

export default {

props: {

value: {

type: String

}

},

computed: {

name: {

get(){return this.value;},

set(value){this.$emit('input', value);}

}

}

}

vue-property-decorator的更多相关文章

  1. Property 'validate' does not exist on type 'Element | Element[] | Vue | Vue[]'. Property 'valid...

    使用vue-cli 3.0+Element-ui时候,调用form表单校验时候出现的问题是: Property 'validate' does not exist on type 'Element | ...

  2. 使用 Vue + TypeScript 时项目中常用的装饰器

    目录 一.@Component 装饰器 1)父组件 2)子组件 二. @Emit 装饰器 1)父组件 2)子组件 三. @Model 装饰器 1)父组件 2)子组件 四. @Prop 装饰器 1)父组 ...

  3. Vue.js的库,包,资源的列表大全。

    官方资源 外部资源 社区 播客 官方示例 入门 开发工具 语法高亮 代码片段 自动补全 组件集合 库和插件 路由 ajax/数据 状态管理 校验 UI组件 i18n 示例 模板 脚手架 整合 插件/指 ...

  4. Python内置函数(63)——property

    英文文档: class property(fget=None, fset=None, fdel=None, doc=None) Return a property attribute. fget is ...

  5. Python内置函数(51)——property

    英文文档: class property(fget=None, fset=None, fdel=None, doc=None) Return a property attribute. fget is ...

  6. Fluent Python: @property

    Fluent Python 9.6节讲到hashable Class, 为了使Vector2d类可散列,有以下条件: (1)实现__hash__方法 (2)实现__eq__方法 (3)让Vector2 ...

  7. python基础===装饰器@property 的扩展

    以下来自Python 3.6.0 Document: class property(fget=None, fset=None, fdel=None, doc=None) Return a proper ...

  8. vue 插件

    开发插件 插件通常会为vue添加全局功能,插件的范围没有限制--一般有下面几种: 1,添加全局方法或者属性,例:vue-coustom-element 2,添加全局资源:指令.过滤器,.过渡等,如vu ...

  9. Decorator:从原理到实践

    前言 原文链接:Nealyang/personalBlog ES6 已经不必在过多介绍,在 ES6 之前,装饰器可能并没有那么重要,因为你只需要加一层 wrapper 就好了,但是现在,由于语法糖 c ...

  10. Property - 特性(Python)

    Property - Python 特性 不同的书籍对 property 一词的翻译有所不同, 我们将 property 翻译成 '特性' 以区别于 attribute 一词. 先看看 propert ...

随机推荐

  1. 小程序colorui框架引入与使用

    colorui是UI框架:   超好用的一款 小程序二维码体验: :  引入方式: 1.先去下载colorui     https://github.com/weilanwl/ColorUI 把col ...

  2. vue-cropper裁剪上传

    效果图: 全部代码: npm install vue-cropper //首先 安装vue-cropper main.js全局引用: import VueCropper from 'vue-cropp ...

  3. vue中触发键盘事件的两种方法和如何自定义键位事件,完整代码!

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. LC-202

    编写一个算法来判断一个数 n 是不是快乐数. 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和. 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 ...

  5. Hyperledger Fabric的test-network启动过程Bash源码详解

    前言 在基于Debian搭建Hyperledger Fabric 2.4开发环境及运行简单案例中,我们已经完成了Fabric 2.4的环境搭建及fabric-samples/test-network官 ...

  6. Java学习1——计算机基础知识

    本文包含了一些计算机基础知识:计算机组成:Windows常用快捷键:DOS常用命令:计算机语言发展史.

  7. 面渣逆袭:RocketMQ二十三问

    基础 1.为什么要使用消息队列呢? 消息队列主要有三大用途,我们拿一个电商系统的下单举例: 解耦:引入消息队列之前,下单完成之后,需要订单服务去调用库存服务减库存,调用营销服务加营销数据--引入消息队 ...

  8. 1.Docker容器学习之新生入门必备基础知识

    0x00 Docker 快速入门 1.基础介绍 描述:Docker [ˈdɑ:kə(r)] 是一个基于Go语言开发实现的遵循Apache 2.0协议开源项目,目标是实现轻量级的操作系统虚拟化解决方案: ...

  9. Go xmas2020 学习笔记 00-03、Basic Types

    00-02-Hello Example. 目录结构. 不一样的Hello World. 巧妙的单元测试. 传入os.Args切片. go mod init. 03-Basic Types. 变量类型与 ...

  10. [转载] go get 拉取第三方包过慢、卡住解决方案

    修改go env,选用国内的代理地址下载.