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对JSON进行模式匹配(Part 1-设计)
Jul 17 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
Mar 10 Javascript
js实现从数组里随机获取元素
Jan 12 Javascript
vue组件实例解析
Jan 10 Javascript
fullCalendar中文API官方文档
Feb 07 Javascript
原生JS实现图片懒加载(lazyload)实例
Jun 13 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
Dec 08 Javascript
vue实现登录后页面跳转到之前页面
Jan 07 Javascript
JavaScript中call和apply方法的区别实例分析
Aug 03 Javascript
小程序从手动埋点到自动埋点的实现方法
Jan 24 Javascript
使用 UniApp 实现小程序的微信登录功能
Jun 09 Javascript
关于小程序优化的一些建议(小结)
Dec 10 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
PHP中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
php读取mysql的简单实例
2014/01/15 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
mac下多个php版本快速切换的方法
2016/10/09 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
PHP中检查isset()和!empty()函数的必要性
2019/02/13 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
用JavaScript调用WebService的示例
2008/04/07 Javascript
jquery validation插件表单验证的一个例子
2010/03/03 Javascript
Javascript学习笔记之相等符号与严格相等符号
2014/11/23 Javascript
原生js和jquery分别实现横向导航菜单效果
2016/05/13 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
2017/05/12 Javascript
webpack进阶——缓存与独立打包的用法
2017/08/02 Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
2017/08/17 jQuery
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
vue给组件传递不同的值方法
2018/09/29 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
微信小程序 scroll-view 实现锚点跳转功能
2019/12/12 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
Vue3新特性之在Composition API中使用CSS Modules
2020/07/13 Javascript
[56:01]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 Effect vs EG
2018/03/31 DOTA
Python写的服务监控程序实例
2015/01/31 Python
举例讲解Python中装饰器的用法
2015/04/27 Python
Python 爬取必应壁纸的实例讲解
2020/02/24 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
Parfumdreams芬兰:购买香水和化妆品
2021/02/13 全球购物
财务总监管理岗位职责
2014/03/08 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
四风问题班子对照检查材料
2014/09/27 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
Python关于OS文件目录处理的实例分享
2021/05/23 Python
Vue3.0中Ref与Reactive的区别示例详析
2021/07/07 Vue.js