vue+typescript基础练习

环境

win10

node -v 8.9.3

vue-cli 3.4

typescript 3.1.5

编辑器 vscode

目标

使用vuecli工具,建立一个项目,使用typescript.并实现基本的路由,组件等功能

步骤

一.建项目

官网文档https://cli.vuejs.org/zh/guide/creating-a-project.html#vue-create

安装必要的环境,然后使用管理员身份打开CMD输入vue ui:

这个是vuecli的图形化界面,使用它建立比较方便,命令行的命令是vue create

点create开始建立项目,选中带typescript stylus的那种,然后一路下一步,直到项目建完.

这里会从node的npm下载很多包,如果网络不好,会比较慢,还可能失败.

二.熟悉目录结构

使用vscode打开这个项目文件夹

看一下,src目录是源码,根目录下有各种配置文件,那个vue.config.js是后来加上去的,本来没有.

这里并没有发现webpack.config的配置文件,官网上是这样讲的 https://cli.vuejs.org/zh/guide/webpack.html#%E7%AE%80%E5%8D%95%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%B9%E5%BC%8F

大概是说,vuecli自己生成了webpack配置文件,可能通过增加一个vue.config.js的配置文件来调整webpack的配置,

可以使用如下命令查看生成的配置文件 ,在项目根目录路径下输入这个命令,将配置导出到output.js后查看

三.启动项目

查看package.json的 scripts属性可知,如下命令启动项目

npm run serve

这里看到了经典的vue项目页

运行前,没有改动任何配置

四.项目主要文件与目录

App.vue //

main.ts // 入口文件

router.ts // 路由

store.ts //

/src/views // 可以是页面文件

/src/plugins // 插件目录,例如添加element-ui这个插件后,会增加element.js文件

/src/components // 组件目录,自定义组件可放此处

五.typescript

由于使用了typescript,所以跟js的不太一样,不过在形式上大体一致,

vue js版本中的属性,成员,生命周期,在ts的类中有一一对应的,基本是一致的.

使用ts要比js麻烦一些,至少要多写很多类型定义这些强类型语言的东西,但是也有些好处的,至少有语法提示,重构时还能批量修改等等,另外,语法检查使用了tslint,比较严格.

虽然麻烦,但觉得还是值得的.vscode有建立代码片段的功能,可以建一个vuets的模板,这样比较省事,点击文件菜单

文件 -> 

使用这个模板,这是个vue文件模板,新建一个vue文件后,输入vuets回车就自动输入好了.减少重复劳动

 1 "Print to console": {
 2         "scope": "vue",
 3         "prefix": "vuets",
 4         "body": [
 5             "<!-- $1 -->",
 6             "<template>",
 7             "    <div class=\"\"></div>",
 8             "</template>",
 9             "",
10             "<script lang=ts>",
11             "import { Component, Vue, Prop, Watch } from ‘vue-property-decorator‘;",
12             "@Component",
13             "export default class $2 extends Vue {",
14             "}",
15             "</script>",
16             "<style lang=stylus scoped>",
17             "</style>"
18         ],
19         "description": "Log output to console"
20     }

六.组件调用传值

以下是一个超连接列表组件,接收一个数组,循环router-link,最终得到a标签列表

 1 <template>
 2     <div class="list">
 3         <router-link :to="item.path" v-for="(item,index) in data" :key="index">{{item.title}}</router-link>
 4     </div>
 5 </template>
 6
 7 <script lang=ts>
 8 import { Component, Vue, Prop, Watch } from ‘vue-property-decorator‘;
 9 @Component
10 export default class extends Vue {
11     @Prop()
12     private data?: [];
13     private created() {
14         window.console.log(this.data);
15     }
16 }
17 </script>
18 <style lang=stylus scoped></style>

与js版本写法上的不同处

这里有个lang=ts,表示使用typescript

这个组件用来扩展功能,提供装饰器?  https://www.tslang.cn/docs/handbook/decorators.html  https://github.com/kaorun343/vue-property-decorator#Prop

有了这个工具后,就可以使用ts的方式来写了.

下面这段代码定义一个ts类,并且继承自Vue,在形式上,和js版本的基本一致

从第1个装饰器 @Component开始,这个的作用就是添加组件,接收一个对象,里面是组件对象,和js的一样

  import com1

  import com2

  components:{com1,com2}

@prop()这个就是js中的属性,下面的成员是属性名,?号表示为可空类型

created()这个方法,就是vue生成周期方法了.与js写法一样.

--调用这个组件:

1.模板部分与js一样,写入模板,并且绑定数据

<list :data="this.data"></list>

2.ts部分

import list from list.vue // 与js一样,引入这个组件

// 在组件装饰器中,注册这个组件

@Component({

  components: { list },  

})

遇到的一个坑,调用组件传入值时,发现总是报错:

Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop‘s value. Prop being mutated: "data"

后来经过网上找资料,说这个意思是,子组件的数据由调用时传入,自己允许修改这个数据,所以一直这个错,

解决方法是,将子组件的属性不设置初始值,也就是只定义属性名,而不设置值,并且也不能修改这个属性.

结果如下

由于ts定义属性一定要赋初值,所以只好定义为可空类型.

七:总结

建项目,熟悉目录与文件,做个组件调用的DEMO,居然也有如此多的坑.

不过好处还是很大的,新版本的cli不用再去折腾并不熟悉的webpack.这降低了上手难度.

ts与vue的结合已经成熟了,后来应该会越来越顺手.

后续还需要一个按目录结构生成路由配置文件的脚本

element-ui和vant两种ui分别用于PC和移动端的界面,还是不错的.但其ts用法,还待研究.

原文地址:https://www.cnblogs.com/mirrortom/p/10699155.html

时间: 2024-08-30 07:39:38

vue+typescript基础练习的相关文章

Vue组件基础用法

前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需,使用不同的组件来拼接页面.这种开发模式使前端页面易于扩展,且灵活性高,而且组件之间也实现了解耦.本文将详细介绍Vue组件基础用法 概述 组件是一个自定义元素或称为一个模块,包括所需的模板.逻辑和样式.在HTML模板中,组件以一个自定义标签的形式存在,起到占位符的功能.通过Vue.js的声明式渲染后,

almost最好的Vue + Typescript系列02 项目结构篇

基于vue-cli 3.x,配合typescript的环境构建的新vue项目,跟以前的结构相比,有了一些变化,下面我们来简单的了解一下 基本结构: node_modules: 项目中安装的依赖模块 public: 主页文件index.html && favicon.icon(将以往单独在外部的index.html移到了public文件夹下),index.html我们可以像平时普通的html文件一样引入文件(css,js)和书写基本信息,添加meta标签等. src: 源码文件夹,基本上我们

Vue.js 基础部分

### Vue.js 基础部分 ## 一. Vue.js 简介 ### 1. Vue.js 是什么 **Vue.js**也称为 Vue,读音/vju:/,类似 view,错误读音 v-u-e 版本: v2.6 - 是一个构建用户界面的框架 - 是一个轻量级 MVVM(Model-View-ViewModel)框架,和 angular.react 类似,其实就是所谓的数据双向绑定 - 数据驱动+组件化的前端开发(核心思想) - 通过简单的 API 实现**响应式的数据绑定**和**组合的视图组件*

Vue框架基础

Vue框架基础 1.什么是vue框架 渐进式的JavaScript框架 渐进式:可以控制一个页面的标签,也可以控制一系列标签,也可以控制整个页面,甚至可以控制整个前端项目 2.vue有什么优势 通俗来讲: 有指令(分支结构,循环结构...),复用页面结构等 有实例成员(过滤器,监听),可以对渲染的数据做二次格式化 有组件(模块的复用与组合),快速搭建页面 官方说法: 虚拟DOM,直接加载的到内存中,加载速度更快 数据的双向绑定 单页面应用 数据驱动 3.为什么要学vue 前端框架主要有三种:An

ngnix 部署 vue项目-基础篇

ngnix 部署 vue项目-基础篇 标签(空格分隔): docker ngnix vue Dockerfile 目录 基础知识 主要知识点 ###1.基础知识 image container docker 命令 build run rm rmi exec Dockerfile npm 打包vue项目 ###2.主要知识点 Dockerfile image container 简单来讲,Dockerfile构建出Docker镜像,通过Docker镜像运行Docker容器. Dockerfile

Vue.js 基础指令实例讲解(各种数据绑定、表单渲染大总结)——新手入门、高手进阶

Vue.js 是一套构建用户界面的渐进式框架.他自身不是一个全能框架--只聚焦于视图层.因此它非常容易学习,非常容易与其它库或已有项目整合.在与相关工具和支持库一起使用时,Vue.js 也能完美地驱动复杂的单页应用.他是基于AnjularJs 编写的,所以和前者的语法特别相似,却又使用简洁了很多. 那今天,我就给大家详细的说道说道这个 Vue.js ,以下是我们这次详解的目录,朋友们可以根据自己的情况选择性阅读,所有操作均附有代码实现. 1. Vue.js 如何绑定到页面中,使用他的功能. 2.

Vue.js基础篇实战--一个ToDoList小应用

距离开始学Vue已经过去一个多月了,总想把学到的东西柔和在一起,做点东西出来,于是有了这个Todolist小应用. 主要功能就是把一天要做的事情记录下来,还实现了: 标记完成事件 删除已完成事件 各种排序 仅显示未完成的项目 本地保存 截图看这里 用时一周,14次commits,把心中的构想基本实现了.详情请看:这里 整个过程下来,收获还是很多的, 1.对mvvm有了进一步的理解, 2.对css布局有了更多的了解. 3.更进一步理解了Vue的事件和组件机制.这些机制将应用解耦,每一部分都隔离出来

Vue.js 基础学习 v-on 指令

在前面的基础学习中已经写了v-for和v-bind两个指令 今天学习v-on指令 v-on指令:用来绑定事件的body中 <div id="app"> </div> script中 var app = new Vue({ el : '#app', methods : { } }) 在div app中加入一个button并绑定一个点击事件 <button v-on:click="onClick">点我</button>

vue+typescript组建前端架构

第一步.安装vue npm install -g vue-cli 第二步.创建vue项目 vue init webpack XXX项目cd XXX项目 第三步.安装依赖 npm install typescript vue-class-component -Dnpm install [email protected] -D 第四步.修改webpack配制文件 然后修改 ./build/webpack.base.conf.js 文件中,在 resolve.extension 中添加 '.ts',使