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. npx和npm的区别

    npx 是 npm 的高级版本,npx 具有更强大的功能. 用途: 在项目中直接运行指令,直接运行node_modules中的某个指令,不需要输入文件路径 node-modules/.bin/babe ...

  2. 【Unity原神AR开发实战 2022】下载原神模型,PMX转FBX,导入到Unity,AR设置,测试应用程序,生成应用程序

    文章目录 一.前言 二.模型下载 1.官网下载 2.模之屋官方下载 3.第三方链接 三.pmx转fbx 1.Blender插件CATS的下载与安装 2.pmx模型的导入 四.Unity开发部分 1.V ...

  3. numpy教程03---ndarray的运算

    欢迎关注公众号[Python开发实战], 获取更多内容! 工具-numpy numpy是使用Python进行数据科学的基础库.numpy以一个强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变 ...

  4. spring-bean依赖注入-03

    set注入:set注入地址 通过构造方法进行注入 1.创建UserDao接口以及UserDaoImpl实现类(接口代码省略) public class UserDaoImpl implements U ...

  5. JDBC 4.0 开始Java操作数据库不用再使用 Class.forName加载驱动类了

    JDBC 4.0 开始Java操作数据库不用再使用 Class.forName加载驱动类了 代码示例 转自 https://docs.oracle.com/javase/tutorial/jdbc/o ...

  6. 小程序监听-data 或者 子组件properties 数据

      observers: {     'plateInfo': (obj) => {       console.log('监听', obj)       if(Object.keys(obj) ...

  7. 代码源 BFS练习1

    BFS练习1 http://oj.daimayuan.top/course/11/problem/147 题目 思路 四个方向进行BFS 注意:此题读写量大,cin会被卡 代码 #include &l ...

  8. python基础练习题(有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?)

    day6 --------------------------------------------------------------- 实例011:养兔子 题目 有一对兔子,从出生后第3个月起每个月 ...

  9. GO 前后端分离开源后台管理系统 Gfast v2.0.4 版发布

    更新内容:1.适配插件商城,开发环境从后台直接安装插件功能:2.代码生成细节修复及功能完善(支持生成上传文件.图片及富文本编辑器功能):3.增加swagger接口文档生成:4.更新goframe版本至 ...

  10. 登录口爆破之ldap的md5加密、验证码认证

    ldap的md5加密配合autoDecoder插件.captcha-killer-modified插件 autoDecoder例 需要传入的数据包为: {"username":&q ...