vue-cli3+typescript初体验小结


Posted in Javascript onFebruary 28, 2019

前言

气势汹涌,ts似乎已经在来的路上,随时可能敲门。

2015年,三大前端框架开始火爆的时候,我还在抱着Backbone不放,一直觉得可以轻易转到其他框架去。后来换工作,现实把脸都打肿了,没做过vue、react、angular?不要!

今天,不能犯这个错了,毕竟时不我与,都快奔三了。

vue-cli3

vue-cli3的详细功能推荐官方文档,不在本文介绍范围内。

安装:

npm install -g @vue/cli

检查安装成功与否:

vue --version

创建项目:

vue create myapp

可以选择Manually select feature来自由选择功能,常用的有vuex、vue-router、CSS Pre-processors等,我们再把typescript勾上,就可以回车进入下一步了。PS:勾选的操作是按空格键。
创建成功之后,执行启动命令:

npm run serve

就可以通过http://localhost:8080/访问本地项目啦。

typescript

如果没有typescript基础,可以先补补课,大概花三十分钟就可以了解typescript的一些特性,比如:TypeScript 入门教程。
ts最主要的一点就是类型定义,有个概念才好看得懂demo。

vue-property-decorator

这是一个涵盖了vue的一些对象的集合,我们可以从这里取一些东西出来:

import { Component, Prop, Vue, Watch } from 'vue-property-decorator';

取出来的这几个属性,分别是 组件定义Component,父组件传递过来的参数Prop,原始vue对象Vue,数据监听对象Watch。还包括这里没有列举出来的ModelEmitInjectProvide,可以自己尝试下。

demo

<template>
 <div class="hello">
  <h1>{{ msg }}--{{ names }}</h1>
  <input type="text" v-model="txt">
  <p>{{ getTxt }}</p>
  <button @click="add">add</button>
  <p>{{ sum }}</p>
 </div>
</template>

<script lang="ts">
import { Component, Prop, Vue, Watch } from 'vue-property-decorator';

@Component
export default class HelloWorld extends Vue {
 //props
 @Prop() private msg!: string
 @Prop() private names!: string
 //data
 private txt: string = '1'
 private sum: number = 0
 //computed
 get getTxt(){
  return this.txt
 }
 //methods
 private add(){
  this.sum++
  console.log(`sum : ${this.sum}`)
 }
 //生命周期
 created(){
  console.log('created')
 }
 //watch
 @Watch('txt') 
 changeTxt(newTxt: string, oldTxt: string){
  console.log(`change txt: ${oldTxt} to ${newTxt}`)
 }
 
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="less">
h3 {
 margin: 40px 0 0;
}
input {
 width: 240px;
 height: 32px;
 line-height: 32px;
}
</style>

以上就是demo,代码组织有点散,没有原来js书写的整齐。

这个demo没有引入组件,如果需要引入组件,应该这样书写:

<template>
 <div class="home">
  <img alt="Vue logo" src="../assets/logo.png">
  <HelloWorld msg="Welcome to Your Vue.js + TypeScript App" names="aaa" />
  <HelloWorld2 msg="Welcome to Your Vue.js + TypeScript App" names="bbb" />
 </div>
</template>

<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
import HelloWorld from '@/components/HelloWorld.vue'; // @ is an alias to /src
import HelloWorld2 from '@/components/HelloWorld2.vue'; // @ is an alias to /src

@Component({
 components: {
  HelloWorld,
  HelloWorld2,
 },
})
export default class Home extends Vue {}
</script>

结语

如果VSCode编辑器有警告提示,比如:

Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option to remove this warning.

可以把工作区其他的项目移除,或者把本项目拖动到工作区的首位,或者在把本项目的tsconfig.json复制到工作区首位的项目的根目录下,重启编辑器,有比较大的概率可以解决警告提示。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 面向对象编程基础:继承
Aug 21 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
Jul 09 Javascript
jQuery aminate方法定位到页面具体位置
Dec 26 Javascript
js获取当前时间(昨天、今天、明天)
Nov 23 Javascript
原生JS实现垂直手风琴效果
Feb 19 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
Mar 01 Javascript
React router动态加载组件之适配器模式的应用详解
Sep 12 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
Feb 15 Javascript
详解vue中axios请求的封装
Apr 08 Javascript
记录一次开发微信网页分享的步骤
May 07 Javascript
Vue双向绑定实现原理与方法详解
May 07 Javascript
浅谈JavaScript作用域
Dec 06 Javascript
详解超简单的react服务器渲染(ssr)入坑指南
Feb 28 #Javascript
JS浅拷贝和深拷贝原理与实现方法分析
Feb 28 #Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
Feb 28 #Javascript
详解写好JS条件语句的5条守则
Feb 28 #Javascript
JS判断两个数组或对象是否相同的方法示例
Feb 28 #Javascript
jQuery.parseJSON()函数详解
Feb 28 #jQuery
js获取form表单中name属性的值
Feb 27 #Javascript
You might like
JAVA/JSP学习系列之四
2006/10/09 PHP
编写PHP的安全策略
2006/10/09 PHP
php扩展ZF――Validate扩展
2008/01/10 PHP
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
PHP中mb_convert_encoding与iconv函数的深入解析
2013/06/21 PHP
php 常用算法和时间复杂度
2013/07/01 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
javascript 实现 秒杀,团购 倒计时展示的记录 分享
2013/07/12 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
2013/08/02 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
2014/04/21 Javascript
深入分析jquery解析json数据
2014/12/09 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
JQuery Mobile实现导航栏和页脚
2016/03/09 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
2016/05/18 Javascript
jq stop()和:is(:animated)的用法及区别(详解)
2017/02/12 Javascript
canvas实现简易的圆环进度条效果
2017/02/28 Javascript
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
Electron 如何调用本地模块的方法
2019/02/01 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
Vite和Vue CLI的优劣
2021/01/30 Vue.js
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
Django框架实现分页显示内容的方法详解
2019/05/10 Python
springboot配置文件抽离 git管理统 配置中心详解
2019/09/02 Python
Python线程条件变量Condition原理解析
2020/01/20 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
英国马莎百货官网:Marks & Spencer
2016/07/29 全球购物
汉语言文学毕业求职信
2014/07/17 职场文书
会议接待欢迎标语
2014/10/08 职场文书
作文评语集锦
2014/12/25 职场文书
暑期社会实践个人总结
2015/03/06 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
python opencv将多个图放在一个窗口的实例详解
2022/02/28 Python
js判断两个数组相等的5种方法
2022/05/06 Javascript