vue-property-decorator
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的更多相关文章
- 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 | ...
- 使用 Vue + TypeScript 时项目中常用的装饰器
目录 一.@Component 装饰器 1)父组件 2)子组件 二. @Emit 装饰器 1)父组件 2)子组件 三. @Model 装饰器 1)父组件 2)子组件 四. @Prop 装饰器 1)父组 ...
- Vue.js的库,包,资源的列表大全。
官方资源 外部资源 社区 播客 官方示例 入门 开发工具 语法高亮 代码片段 自动补全 组件集合 库和插件 路由 ajax/数据 状态管理 校验 UI组件 i18n 示例 模板 脚手架 整合 插件/指 ...
- Python内置函数(63)——property
英文文档: class property(fget=None, fset=None, fdel=None, doc=None) Return a property attribute. fget is ...
- Python内置函数(51)——property
英文文档: class property(fget=None, fset=None, fdel=None, doc=None) Return a property attribute. fget is ...
- Fluent Python: @property
Fluent Python 9.6节讲到hashable Class, 为了使Vector2d类可散列,有以下条件: (1)实现__hash__方法 (2)实现__eq__方法 (3)让Vector2 ...
- python基础===装饰器@property 的扩展
以下来自Python 3.6.0 Document: class property(fget=None, fset=None, fdel=None, doc=None) Return a proper ...
- vue 插件
开发插件 插件通常会为vue添加全局功能,插件的范围没有限制--一般有下面几种: 1,添加全局方法或者属性,例:vue-coustom-element 2,添加全局资源:指令.过滤器,.过渡等,如vu ...
- Decorator:从原理到实践
前言 原文链接:Nealyang/personalBlog ES6 已经不必在过多介绍,在 ES6 之前,装饰器可能并没有那么重要,因为你只需要加一层 wrapper 就好了,但是现在,由于语法糖 c ...
- Property - 特性(Python)
Property - Python 特性 不同的书籍对 property 一词的翻译有所不同, 我们将 property 翻译成 '特性' 以区别于 attribute 一词. 先看看 propert ...
随机推荐
- 项目中常用到的布局 flex
1. 没header,footer固定 html<div class="page"> <div class="top"> <div ...
- 用 rollup + gulp 造个轮子,别说还挺香
前戏 我是16年入了前端的坑,17年知道了gulp和rollup这两个玩意儿.由于那时webpack势头很猛,便一直没有正眼瞧过它一眼. 直到20年进了一家小公司,做了很多类似的小项目,相同的代码拷来 ...
- python基本数据类型介绍
数据类型 首先知道什么是数据类型 针对不同的数据类型采用不同的处理方法 --目录-- 一.数据类型之整型 二.数据类型之浮点型 三.数据类型之字串符 四.数据之列表 一.数据类型之整型 1.其实呢就是 ...
- MySQL8.0.x 版本安装步骤傻瓜式教程【官方版】
MySQL8.0.x 安装 一.下载 MySQL官网下载链接:https://downloads.mysql.com/archives/community/ 选择版本后下载zip文件 博主选择的是8. ...
- MySql创建分区
一.Mysql分区类型 1.RANGE 分区:基于属于一个给定连续区间的列值,把多行分配给分区. 2.HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列 ...
- angular.js中 路由 用法及概念
在开讲之前,首先谈谈APP应用.平时我们用的app总是多页面,如果用原生安卓或者苹果,那当然很流畅啦.但是当我们用一般的html页面做移动端,简单时候我们可以用<a href="&qu ...
- .NET 7 预览版2 中的 ASP.NET Core 更新
.NET 7 预览版2 现已推出,其中包括对ASP.NET Core 的许多重大改进. 以下是此预览版中新增内容的摘要: 推断来自服务的API 控制器操作参数 SignalR 集线器方法的依赖注入 为 ...
- Ansible Notes: Tower Credential的本质
Ansible AWX/Tower credential 的本质 Ansible Tower (社区版本叫AWX)用credential这个资源来对象来存储playbook运行过程中用到的机密信息.比 ...
- Java创建boolean型数组
Java如何声明并初始化一个boolean型的数组? public class Main{ static boolean[] arr1 = new boolean[20]; public static ...
- Go语言实践模式 - 函数选项模式(Functional Options Pattern)
什么是函数选项模式 大家好,我是小白,有点黑的那个白. 最近遇到一个问题,因为业务需求,需要对接三方平台. 而三方平台提供的一些HTTP(S)接口都有统一的密钥生成规则要求. 为此我们封装了一个独立的 ...