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. js判断输入数字是否是整数,金额、数字

    function isIntNum(strNum){//js判断输入数字是否是整数 仅供学习思想 var strCheckNum = strNum+""; if(strCheckN ...

  2. CSS简单样式练习(二)

    运行效果: 源代码: 1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta char ...

  3. 直接远程下载或上传文件到linux系统中的简单办法

    如果执行sz 或者rz 没有这个命令,则安装lrzsz包执行:yum install lrzsz 等待安装完毕,然后一直输入Y即可. sz:将选定的文件发送(send)到本地机器 -a 以文本方式传输 ...

  4. centos下 Docker-修改磁盘存储目录(实操)

    预备知识: Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目.它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linux 基金 ...

  5. Go xmas2020 学习笔记 10、Slices in Detail

    10-Slices in Detail. Slice. Empty vs nil slice

  6. 基于Vue的v-charts导出图片并下载

    依赖 npm install file-saver 页面 <ve-chart ref="chart"></ve-chart> <el-button t ...

  7. python基础练习题(题目 模仿静态变量的用法)

    day27 --------------------------------------------------------------- 实例041:类的方法与变量 题目 模仿静态变量的用法. 程序 ...

  8. Persistent Bits - 题解【二进制】

    题面: WhatNext Software creates sequence generators that they hope will produce fairly random sequence ...

  9. ElasticSearch7.3学习(二十)----采用restful风格查询详解

    1.Query DSL入门 1.1 DSL DSL:Domain Specified Language,特定领域的语言.es特有的搜索语言,可在请求体中携带搜索条件,功能强大. 查询全部 GET /b ...

  10. 基于 POI 封装 ExcelUtil 精简的 Excel 导入导出

    注 本文是使用 org.apache.poi 进行一次简单的封装,适用于大部分 excel 导入导出功能.过程中可能会用到反射,如若有对于性能有极致强迫症的同学,看看就好. 序 由于 poi 本身只是 ...