您现在的位置是:网站首页> 编程资料编程资料
一文秒懂vue-property-decorator_vue.js_
2023-05-24
292人已围观
简介 一文秒懂vue-property-decorator_vue.js_
参考:https://github.com/kaorun343/vue-property-decorator
怎么使vue支持ts写法呢,我们需要用到vue-property-decorator,这个组件完全依赖于vue-class-component.
首先安装: npm i -D vue-property-decorator
我们来看下页面上代码展示:
foo:{{foo}} defaultArg:{{defaultArg}} | {{countplus}}
vue-proporty-decorator它具备以下几个装饰器和功能:
- @Component
- @Prop
- @PropSync
- @Model
- @Watch
- @Provide
- @Inject
- @ProvideReactive
- @InjectReactive
- @Emit
- @Ref
1.@Component(options:ComponentOptions = {})
@Component 装饰器可以接收一个对象作为参数,可以在对象中声明 components ,filters,directives等未提供装饰器的选项,也可以声明computed,watch等
registerHooks:
除了上面介绍的将beforeRouteLeave放在Component中之外,还可以全局注册,就是registerHooks
2.@Prop(options: (PropOptions | Constructor[] | Constructor) = {})
@Prop装饰器接收一个参数,这个参数可以有三种写法:
Constructor,例如String,Number,Boolean等,指定prop的类型;Constructor[],指定prop的可选类型;PropOptions,可以使用以下选项:type,default,required,validator。
注意:属性的ts类型后面需要加上undefined类型;或者在属性名后面加上!,表示非null 和 非undefined
的断言,否则编译器会给出错误提示;
// 父组件:// 子组件:name: {{name}} | age: {{age}} | sex: {{sex}}
3,@PropSync(propName: string, options: (PropOptions | Constructor[] | Constructor) = {})
@PropSync装饰器与@prop用法类似,二者的区别在于:
@PropSync装饰器接收两个参数:
propName: string 表示父组件传递过来的属性名;
options: Constructor | Constructor[] | PropOptions与@Prop的第一个参数一致;@PropSync会生成一个新的计算属性。
注意,使用PropSync的时候是要在父组件配合.sync使用的
// 父组件// 子组件父组件
like:{{like}}子组件:
syncedlike:{{ syncedlike }}
4.@Model(event?: string, options: (PropOptions | Constructor[] | Constructor) = {})
@Model装饰器允许我们在一个组件上自定义v-model,接收两个参数:
event: string事件名。options: Constructor | Constructor[] | PropOptions与@Prop的第一个参数一致。
注意,有看不懂的,可以去看下vue官网文档, https://cn.vuejs.org/v2/api/#model
// 父组件// 子组件父组件 app : {{fooTs}}子组件:
5,@Watch(path: string, options: WatchOptions = {})
@Watch装饰器接收两个参数:path: string被侦听的属性名;options?: WatchOptions={} options可以包含两个属性 :
immediate?:boolean 侦听开始之后是否立即调用该回调函数;deep?:boolean 被侦听的对象的属性被改变时,是否调用该回调函数;
发生在beforeCreate勾子之后,created勾子之前
child:{{child}}
6,@Emit(event?: string)
@Emit装饰器接收一个可选参数,该参数是$Emit的第一个参数,充当事件名。如果没有提供这个参数,$Emit会将回调函数名的camelCase转为kebab-case,并将其作为事件名;@Emit会将回调函数的返回值作为第二个参数,如果返回值是一个Promise对象,$emit会在Promise对象被标记为resolved之后触发;@Emit的回调函数的参数,会放在其返回值之后,一起被$emit当做参数使用。
// 父组件点击emit获取子组件的名字// 子组件
姓名:{{emitData.name}}子组件:姓名:{{person.name}}
年龄:{{person.age}}
性别:{{person.sex}}
相关内容
- Javascript Constructor构造器模式与Module模块模式_javascript技巧_
- vue中$emit的用法详解_vue.js_
- 使用react+redux实现弹出框案例_React_
- React封装全屏弹框的方法_React_
- Vue 实现新国标红绿灯效果实例详解_vue.js_
- 关于vue3 vuex4 store的响应式取值问题解决_vue.js_
- Java前后端分离之权限管理示例分析_javascript技巧_
- Element UI中table单元格合并的解决过程_vue.js_
- 一文教会你解决js数字精度丢失问题_javascript技巧_
- js实现注册页面校验功能_javascript技巧_
点击排行
本栏推荐
