Vue中用TypeScript改写JavaScript及装饰器使用
TypeScrpt相比JavaScript的主要特点
- 多了属性声明类型,格式:
属性名:声明类型
name:string=""; //此时name属性声明类型为string
复制代码
- 使用
class
类来引入或暴露内容 TypeScript中将所有属性和方法封装成类,用类的形式引入或暴露其内容,在vue中具体示例可见下文“基本格式”。
基本格式
组件<script>
中要加lang="ts"
import Vue from "vue"; // 导入vue声明
import Component from "vue-class-component"; // 导入组件装饰器
import {MyClassApi } from "@/api/myClassApi";//导入路径为@/api/下的myClassApi.ts文件中的MyClassApi 类
@Component({}) // Component装饰器装饰Login类(声明此为组件)
export default class MyVueTypeScript extends Vue {name:string = "";//属性格式:用=赋值,避免用:,因为:代表声明属性数据类型,属性后要加;myClass: MyClassApi = new MyClassApi();//新建一个类//(MyClassApi为之前myClassApi.ts文件里声明的类,此处来新建创建此类并接收)MyMethod(param) { //方法格式:直接用函数调用的格式,无需用声明函数形式,且方法后不加;let apiname = this.myClass.apiName+param; //调用MyclassApi类中的属性,与参数拼接console.log(apiname);}
复制代码
在路径@/api/
下的myClassApi.ts
文件中暴露class对象
export class MyClassApi { //声明类名时首字母必须大写,并使用驼峰命名apiName:string ="api";apiMethond(){//编写相关方法}}
复制代码
Vue组件装饰器的使用说明
在上述代码中,装饰器用的vue-class-component
,TypeScript中还有另一个装饰器vue-property-decorator
这两个装饰器功能一样,但是用法格式有所不同,在涉及组件传值的时候略有区别。
假设子组件为@/myComponent/
路径下的myChildComponent.vue
文件,文件中:
export class MyChildComponent { //声明类名时首字母必须大写,并使用驼峰命名childName:string ="";childMethond(){//编写相关方法}
复制代码
- 先介绍
vue-class-component
,此中只有一个实例Component
,导入时用
import Component from "vue-class-component"
使用格式如下:
import Vue from "vue";
import Component from "vue-class-component";
import MyChildComponent from '@/myComponent/myChildComponent.vue'; // 导入子组件//导入vue文件时文件名必须加后缀,否则识别不出来
@Component({components:{MyChildComponent // 导入子组件},props: { //父组件向子组件传值格式fatherMessage: String}
})
export default class MyVueTypeScript extends Vue {name:string = "";}
复制代码
此时父子组件传值时,只是把内容写在装饰器@Component
中,其内容写法与vue没有区别
- 再来看
vue-property-decorator
的用法vue-property-decorator
中有多个组件装饰器,这个插件是依赖于vue-class-component
的,它将vue所有组件的用法都规定成了装饰器的写法,使用格式如下:
import Vue from "vue";
import { Component, Prop } from "vue-property-decorator" ; // 导入多个组件的方式@Component({})
export default class MyVueTypeScript extends Vue {@Prop() //所有vue用法都转变成装饰器用法(此装饰器为声明prop)fatherAge: number@Prop({ default: '张三' }) //装饰器用法中传默认值fatherName: string@Prop([String, Boolean]) 多个可能的类型(stringhuoboolean类型)ifWork: string | boolean@Watch('name')onrNameChanged(val: string, oldVal: string) {}
}复制代码
转载于:https://juejin.im/post/5bc9768de51d450e6973c619
Vue中用TypeScript改写JavaScript及装饰器使用相关推荐
- php和python对比-PHP、Python和Javascript的装饰器模式对比
修饰模式(Decorator Pattern),又叫装饰者模式,是面向对象编程领域中,一种动态地往一个类中添加新的行为的设计模式.就功能而言,修饰模式相比生成子类更为灵活,这样可以给某个对象而不是整个 ...
- TypeScript reflect-metadata 结合方法装饰器实现的一个自定义语法检查的例子
reflect-metadata 例子: import 'reflect-metadata';function validate(target: Object,key: string,descript ...
- TypeScript(八)装饰器
目录 前言 定义 类装饰器 基本用法 操作方式 操作类的原型 类继承操作 方法装饰器 属性装饰器 存取器装饰器 参数装饰器 基本用法 参数过滤器 元数据函数实现 参数过滤 效果实践 装饰器优先级 相同 ...
- Angular 个人深究(一)【Angular中的Typescript 装饰器】
Angular 个人深究[Angular中的Typescript 装饰器] 最近进入一个新的前端项目,为了能够更好地了解Angular框架,想到要研究底层代码. 注:本人前端小白一枚,文章旨在记录自己 ...
- 三分钟快速了解typeScript的装饰器
↓↓↓ typeScript系列学习文章目录 装饰器:装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,属性或参数上,可以修改类的行为. 通俗的讲装饰器就是一个方法,可以注入到类.方法.属性参数 ...
- 【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--请求处理函数装饰器注册篇(5/8)【controller+action】...
文章目录 前情概要 上篇文章把action的注册讲完了,但是我们的处理函数没有指定可接受的httpmethod,也没有别名上面的.下面我们使用typescript的特性之一装饰器来实现一把这个特性. ...
- python 装饰器(Decorators)原理说明
本文目的是由浅入深地介绍python装饰器原理 装饰器(Decorators)是 Python 的一个重要部分 其功能是, 在不修改原函数(类)定义代码的情况下,增加新的功能 为了理解和实现装饰器,我 ...
- 从 JavaScript 到 TypeScript 6 - Vue 引入 TypeScript
随着应用的庞大,项目中 JavaScript 的代码也会越来越臃肿,这时候许多 JavaScript 的语言弊端就会愈发明显,而 TypeScript 的出现,就是着力于解决 JavaScript 语 ...
- React 中 TypeScript 和装饰器及 Hooks
概念 TypeScript 是强类型语言,相对于JavaScript 弱类型语言,它具有类型检测的功能,扩展了JavaScript 的语法. TS的安装与执行: //全局安装typescript np ...
最新文章
- php 获取手机品牌,三到五年内,这家品牌要冲刺手机市场第一梯队
- 数据科学家技能地铁图
- WIN10映射ubuntu1604共享目录(网络驱动器)
- C语言程序的内存分配方式
- Android应用程序组件Content Provider在应用程序之间共享数据的原理分析(2)
- cache 简单理解
- egg --- 初始化一个egg项目基本结构说明
- String、int、Integer互转的常用方法
- # 根据三边求角度_小升初数学必学的10种图形求面积法,你家娃都会了吗?
- 英国航空系统周末故障,可能会损失掉全年将近 3% 的利润
- pdf-lib给pdf添加水印并预览、下载、打印
- 读取SAE J1939协议数据流
- ASCII、GB2312、GBK、GB18030、Unicode、UTF-8、BIG5 编码分析
- 程序员转项目管理之考证PMP
- 外网远程访问群晖NAS,内网穿透
- win7防火墙规则设置
- [JAVA使用技巧]Java抽取Word和PDF格式文件_网络大本营
- 读书笔记1 PPT设计之道
- 解决测试过程中遇到的致命问题
- 企业微信开发(五)群活码
热门文章
- 人工智能芯片借鉴大脑学习机制实现终身学习
- 当脑机接口应用于建筑工地,会发生什么?
- 《星球大战:前线2》预告片发布
- DokiCam 360°4K相机:为极致运动爱好者而生
- 71岁的亿万富翁坐自家飞船成功游览太空!此前已为太空旅行砸了超10亿美元
- DeeCamp2021启动,李开复张亚勤吴恩达等大咖喊你报名啦
- Jupyter Notebook已出现“返祖现象”,这款工具让你在终端里使用它
- 合格的CTO应该是什么样?雷军王海峰王小川等共谈「技术创新」| CNCC2020
- 谷歌TPU训练BERT只要23秒,华为AI芯片达国际领先水平,MLPerf v0.7出炉
- 搞事情?!2020云·创季来啦,量子位带你领略云产业的耳目一新!