#TypeScript# vue-property-decorator vue-property-decorator是在Vue中使用TypeScript时,非常好用的一个库,使用装饰器来简化书写 1、安装 npm install --save vue-property-decorator @Component (from vue-class-component) @Prop @Model @Watch @ el) { el.focus() } } } } ts写法 import {Component,Vue} from 'vue-property-decorator == -1 } } } ts写法 import {Component,Vue,Prop} from vue-property-decorator; @Component $emit('promise', value) }) } } } ts写法 import { Vue, Component, Emit } from 'vue-property-decorator
参考:https://github.com/kaorun343/vue-property-decorator 怎么使vue支持ts写法呢,我们需要用到vue-property-decorator,这个组件完全依赖于 首先安装: npm i -D vue-property-decorator 我们来看下页面上代码展示: <template>
英文原文: https://github.com/kaorun343/vue-property-decorator/blob/master/README.md 此库完全依赖于vue-class-component , 所以请使用此库前, 先阅读它的文档 安装 npm i -S vue-property-decorator 使用 这是一些装饰器和一个Mixin函数 @Prop @PropSync @Model @Watch 在引入vue-property-decorator 之前 引入 reflect-metadata (只需引入一次 reflect-metadata.) import 'reflect-metadata' import { Vue, Component, Prop } from 'vue-property-decorator' @Component export default class MyComponent 在这种情况下, 驼峰命名将被转换成短横线隔开式命名. import { Vue, Component, Emit } from 'vue-property-decorator' @Component
vue-property-decorator 这个组件完全依赖于vue-class-component.它具备以下几个属性: @Component (完全继承于vue-class-component) 之后,script中的标签就变为这样: <script lang="ts"> import {Vue, Component} from 'vue-property-decorator'; @Emit 关于Vue中的事件的监听与触发,Vue提供了两个函数emit和on.那么在vue-property-decorator中如何使用呢? 这就需要用到vue-property-decorator提供的@Emit属性. @Watch 我们可以利用vue-property-decorator提供的@Watch装饰器来替换Vue中的watch属性,以此来监听值的变化.
一、前言 在VUE项目中应用typescript,我们需要引入一个库vue-property-decorator, 其是基于vue-class-component库而来,这个库vue官方推出的一个支持使用 计算属性可以被声明为类的属性访问器 初始化的 data 可以被声明为类属性 data、render 以及所有的 Vue 生命周期钩子可以直接作为类的成员方法 所有其他属性,需要放在装饰器中 二、使用 vue-property-decorator 如果需要定义比如 name、components、filters、directives以及自定义属性,就可以在Component装饰器中定义,如下: import {Component,Vue} from 'vue-property-decorator ): void { this.count = param } } @props 组件接收属性的装饰器,如下使用: import {Component,Vue,Prop} from vue-property-decorator 提供的 @Emit 装饰器就是代替Vue 中的事件的触发$emit,如下: import {Vue, Component, Emit} from 'vue-property-decorator';
一、前言 与link类似 在VUE项目中应用typescript,我们需要引入一个库vue-property-decorator, 其是基于vue-class-component库而来,这个库vue官方推出的一个支持使用 计算属性可以被声明为类的属性访问器 初始化的 data 可以被声明为类属性 data、render 以及所有的 Vue 生命周期钩子可以直接作为类的成员方法 所有其他属性,需要放在装饰器中 二、使用 vue-property-decorator 如果需要定义比如 name、components、filters、directives以及自定义属性,就可以在Component装饰器中定义,如下: import {Component,Vue} from 'vue-property-decorator ): void { this.count = param } } @props 组件接收属性的装饰器,如下使用: import {Component,Vue,Prop} from vue-property-decorator 提供的 @Emit 装饰器就是代替Vue 中的事件的触发$emit,如下: import {Vue, Component, Emit} from 'vue-property-decorator';
Manually select features > (*) TypeScript安装依赖Vue CLI 会自动安装必要的依赖,包括 typescript 和 vue-property-decorator 如果你手动创建项目,可以运行以下命令安装这些依赖:npm install typescript vue-property-decorator配置tsconfig.json在项目根目录下创建或更新 tsconfig.json tests/**/*.tsx"], "exclude": ["node_modules"] }三、使用TypeScript编写Vue组件基础组件使用 TypeScript 编写 Vue 组件时,可以使用 vue-property-decorator
Count: { { count }}
{ { content }}
一直以来组件都是一个对象形式的,下面来认识下基于类的组件吧~ 直奔用法 相比于比较常用的export一个对象,类的形式要额外引入两个包: npm、vue-property-decorator。 关于修饰器的用法看这里 import Vue from 'vue' import { Component } from 'vue-property-decorator' @Compontent export // method greet() { console.log(`hello ${this.name}`) } } 复制代码 更多组件修饰器的使用 下面两个是vue-property-decorator arguments) } return descriptor } } } 复制代码 import Vue from 'vue' import { Component } from 'vue-property-decorator
让我们开始吧 1.基于类的组件 //Typescript code <script lang="ts"> import { Component, Vue } from 'vue-property-decorator vue-property-decorator 是一个第三方包,它使用了 Vue 类组件包,并在此基础上添加了更多的装饰器。我们也可以显式地使用 name 属性来命名组件,但是使用它作为类名就足够了。 首先我们可以像下面一样从 vue-property-decorator 引入 Prop 装饰器。我们还可以使用 readonly 去避免操作改变 props。 import { Component, Prop, Vue } from 'vue-property-decorator' @Component export default class HelloWorld import { Component, Vue } from 'vue-property-decorator' @Component class ProjectMixin extends Vue {
vue2,class 写法真的非常爽import { Component as tsc } from 'vue-tsx-support';import { Component, Watch } from 'vue-property-decorator Additionally almost all users of vue-class-component are using vue-property-decorator (https://github.com /kaorun343/vue-property-decorator) which also seems abandoned.https://github.com/vuejs/vue-class-component
> </template> <script lang="ts"> import Vue from "vue"; import {Component} from "vue-property-decorator </template> <script lang="ts"> import Vue from "vue"; import {Component, Prop} from "vue-property-decorator div>#[[$END$]]#
-- 省略 -->
安装vue装饰器 vue-property-decorator库完全依赖vue-class-component,在安装时要一起装上 npm install vue-class-component vue-property-decorator -D 改造.vue 只需要修改srcipt内的东西即可,其他不需要改动 <script lang="ts"> import { Component, Vue } from "vue-property-decorator : 为属性使用明确的赋值断言修饰符,了解更多看文档 import { Component, Vue, Prop } from "vue-property-decorator"; export default type: Number, default: 0 } } ... } Watch import { Component, Vue, Watch } from "vue-property-decorator 这里列出一些在 Vue 中使用三方库的例子: element-ui 组件参数 使用类型定义 import { Component, Vue } from "vue-property-decorator"
: vue-property-decorator是基于 vue 组织里 vue-class-component 所做的拓展import { Vue, Component, Inject, Provide , Prop, Model, Watch, Emit, Mixins } from 'vue-property-decorator' vuex-module-decorators: 用 typescript getModule } from 'vuex-module-decorators' 组件声明 创建组件的方式变成如下 import { Component, Prop, Vue, Watch } from 'vue-property-decorator Component export default class Test extends Vue { } data 对象 import { Component, Prop, Vue, Watch } from 'vue-property-decorator } public mounted():void{ console.log('mounted') } emit 事件 import { Vue, Component, Emit } from 'vue-property-decorator
id="app"> <Home></Home>
-- 省略 -->
>
{{ message }}
</template> <script lang='ts'> import { Vue, Component, Prop, Provide } from 'vue-property-decorator slot></slot>
template> @RouteName(name: string) decorator 设置路由名称,在vue-router中对应了命名路由 import { Vue, Component } from 'vue-property-decorator import { Vue, Component } from 'vue-property-decorator'; import { Context } from 'ea-router'; @Context Note that: 如果同时使用 @Alias 和 @Context, 上下文的参数会自动添加在alias后面, 就像下面的例子: import { Vue, Component } from 'vue-property-decorator @EnableProps() decorator 开启路由参数的Boolean模式, 对应了vue-router中的路由传参-布尔模式 import { Vue, Component } from 'vue-property-decorator @Meta(meta: object) decorator 设置路由元信息,对应vue-router中的路由元信息 import { Vue, Component } from 'vue-property-decorator
template> @RouteName(name: string) decorator 设置路由名称,在vue-router中对应了命名路由 import { Vue, Component } from 'vue-property-decorator import { Vue, Component } from 'vue-property-decorator'; import { Context } from 'ea-router'; @Context Note that: 如果同时使用 @Alias 和 @Context, 上下文的参数会自动添加在alias后面, 就像下面的例子: import { Vue, Component } from 'vue-property-decorator @EnableProps() decorator 开启路由参数的Boolean模式, 对应了vue-router中的路由传参-布尔模式 import { Vue, Component } from 'vue-property-decorator @Meta(meta: object) decorator 设置路由元信息,对应vue-router中的路由元信息 import { Vue, Component } from 'vue-property-decorator