当前位置: 首页 > 编程日记 > 正文

Vue从Hello World到打包(后端适读)

Vue从Hello World到上线


Vue 简介

Vue是个MVVM框架。

特点:简单易学、体积小、性能高。并且它的源码耦合性非常低,了解它的过程也就是思想进步的过程。

当然,只学这一个框架,无法完成前端的全部工作,除了Vue之外,还需要了解axios、Webpack,才能完成整个开发过程。

好了,我们开始!

Vue的Hello World

写Hello World已经成了传统,我们也不例外,尽管Vue的入门文档写的非常好,但是在这里还是按照我的思路来走吧!

首先,我们先写一个html页面:

<body><div>Hello World</div> 
</body>

好了,现在我们已经写出了一个静态的Hello World,现在我们要用Vue将它改造成动态的。Vue的引入可以很简单,像极了jQuery,一个<script>标签引入即可。

<body><div>Hello World</div> <script src="vue.js"></script>
</body>

然后我们再建一个<script>书写vue代码。

<body><div>Hello World</div> <script src="vue.js"></script><script>new Vue({el: 'body',     // 这里遵循的是css的选择器规则,这句的意思是,body标签内都是Vue的控制范围data: {     // 这里是数据,需要Vue绑定的数据都放在这里myData: 'Hello World'   }})</script>
</body>

好了,现在我们只差一步了,Vue里面已经有了数据,只欠绑定,将<div>内的内容改成这样既可:{{ myData }},那么最终的写法是这样:

<body><div>{{ myData }}</div> <script src="vue.js"></script><script>new Vue({el: 'body',    data: {     myData: 'Hello World'   // 上面的el和data这两个单词都是不允许改的,但是这句里的key可以随意命名}})</script>
</body>

现在Hello World已经写出来了,那就需要敲打一下了。el: 'body'这个地方十分不建议写成这样,直接绑定body会有一些方法无法使用,建议写成这样:

<body><section id="app"><div>{{ myData }}</div> </section><script src="vue.js"></script><script>new Vue({el: '#app',    data: {     myData: 'Hello World'   // 上面的el和data这两个单词都是不允许改的,但是这句里的key可以随意命名}})</script>
</body>

在body内部添加一层并赋一个id是比较好的做法。放心,这或许是你整个Vue项目唯一需要写的ID属性,它不需要像jQuery一样命名一大堆ID。

添加事件

上面的Hello World其实就是一个数据绑定,那么我们深入一点,来了解事件绑定:

现在,有一个需求,需要在<div>{{ myData }}</div>这个块里添加一个点击事件,给你十秒钟想一想jQuery是怎么做的,是不是挺复杂的?而Vue有很简单的事件绑定写法:

<div @click="myClick">{{ myData }}</div>
// 是不是很像onClick事件?
// 其实是不一样的,在最终生成的代码里,你不会看到@click,它最终会被转换成DOM2级事件。

现在,我们点击这个<div>块的时候,就会触发myClick方法,咦,等等,myClick方法还没定义呢!

那我们回到js代码里,添加methods属性:

new Vue({el: '#app',    data: {     myData: 'Hello World'},methods: {      // 这个methods也是不可以改的哦,记得加smyClick: function() {alert("你点" + this.myData + "干啥?");// 你可以尽情使用data里的数据,但是要加上this指向}}
})

好了,可以运行了,如果myClick方法需要加参数的话,也很简单:<div @click="myClick(myData)">{{ myData }}</div>,当然,下面的定义部分也需要配上形参:

myClick: function(data) {alert("你点" + data + "干啥?");
}

相信你看出来了,data里面是放数据的,methods里面是放方法的。

添加属性

理解了添加事件,那理解添加属性就更简单了。

例如,有个<img>标签的图片路径是动态的,那么我们就需要用上属性绑定了:

<img :src="srcUrl" />
...
new Vue({el: '#app',    data: {     srcUrl: '../images/logo.png'}
})

警告:<img :src="srcUrl" />如果这个标签的src属性值是动态的,那就不要添加原生的src属性,通过属性绑定的方式引入路径是最佳实践,其他属性绑定也是同理。

更强的数据绑定

如果我们有这样一段数据:

arr = [1, 2, 3, 4, 5, 6];

需要用<ul><li>标签渲染,给你十秒钟想想jQuery是怎么做的?不管怎么做,做出来都是悲剧!

我们看看Vue是怎么做的?

data: {list: arr
}
...
<ul><li v-for="item in list">{{ item }}</li>
</ul>

如此一来,数据就可以漂亮地渲染到页面上了。

我们再来个复杂点的数据:

json = [{"AirPortCode": "HGH", "Temperature": "10℃", "Visib": "很好", "WeatherType": "晴", "Wind": "东风 - 3级", "city": "杭州"}, {"AirPortCode": "CAN", "Temperature": "17℃", "Visib": "7000米", "WeatherType": "多云", "Wind": "北偏东北风 - 2级", "city": "广州"}, {"AirPortCode": "PEK", "Temperature": "12℃", "Visib": "很好", "WeatherType": "晴", "Wind": "南偏西南风 - 2级", "city": "北京首都"}
]

给你十秒钟想想……

算了,还是直接上vue吧

data: {list: json
}
...
<ul><li v-for="item in json">{{ item.city }} {{ item.Temperature }}</li>
</ul>

在这里只显示了城市和温度两样东西。你愿意的话,可以显示更多。尽管数据好像复杂了很多,但是Vue应付起来并没有多吃力。

好了,我想我们的页面已经足够动态了,但是还不够智能,怎么说呢?例如上面的数据里有个Wind的字段,将这个字段渲染到页面上的时候,我并不希望全部渲染,我只想渲染风力级别,那我需要将前面的风向给去掉,这时候就需要加过滤器。

<li v-for="item in json">{{ item.Wind | cutWind }}</div>

Vue提供了内置的过滤器,但切割天气显然不是它内置的过滤器,因此我们现在需要自己定义一个:

Vue.filter( 'cutWind' , function(value) {return value.split("-")[1];
});

本来还应该加一个去空格的处理,但现在为了演示就暂且无视空格吧……

Ajax

现在数据都可以动态渲染了,我们需要考虑的就是,应该怎么从服务端获取数据,ajax库有很多,Vue原本也自己实现了一个,但后来弃用了,原因是不想重复造轮子。现在官方推荐的Ajax库叫axios,它确实也是一个小巧而轻量的库,体积大约是11k,同样可以通过<script>标签引入。

使用起来也简单,一般的ajax的POST请求:

var _this = this;
axios.post('../url', string)
.then(function(res) {_this.init(res);
});

看!axios将自己暴露了,它是个类库!

然而,初始化的数据需要一载入页面就发请求去获取,我们可以将它写入钩子函数:

钩子函数,也就是从创建Vue实例到销毁的过程中,每一个阶段提供出来的一个扩展接口,我们可以通过这些接口在特定的生命周期时刻执行相应的动作。

new Vue({el: '#app',    data: {     myData: ''},mounted: function() {var _this = this;this.$nextTick(function() {axios.post('./url', arg).then(function(res) {_this.init(res.data);});})},methods: {      myClick: function() {}}
})

init()就是我们的初始化方法了。

打包

上面的知识点已经足够支撑我们完成一个日常项目,但这些语法层面的知识点只是表面,使用MVVM框架开发,关键是习惯专注于操作数据的思想,才能将代码量从根本上减小。

现在,我们完成一个项目后,需要打包,因为在开发环境下,运行所依赖的包达到好几百个,为了将文件体积缩减到正常范围,必须按需打包。打包工具我们选用的是webpack,为什么选它呢?因为几乎没别的选!

webpack如何配置,这个交给前端工程师就好了!

一个Vue的项目,目录树大致是这样:

clipboard.png

/src目录是源码文件夹,里面的都是源码,开发环境都只打开这个文件。
/dist目录是发布文件夹,取自“distribution(发布)”这个单词,里面的代码都是正式代码,所有资源都经过压缩,因此不是给人看的。

/src里的文件做了相应的修改后,可以查看package.json这个文件,找到

"scripts": {"build": "webpack --progress -p --watch"
},

不同的项目可能略有差别,但webpack命令就是我们需要的,这条命令的key是build,因此我们在项目的命令行运行npm run build,即可完成打包,如果没有报错信息,说明一切顺利,只需要将dist目录里的东西部署到线上即可。

相关文章:

Android和iOS那个好?

Android和iOS那个好&#xff1f; 应该先往哪个上面投入资源&#xff1f; 多次被人问到此类问题&#xff0c;笔者刚好自己的项目也需要考虑iOS版本。就索性进行了一番调研&#xff0c;于是有了本文&#xff08;本次不讨论越狱的iOS&#xff09; 首先从情感上&#xff0c;你…

对话谢宝友:搞真正自研的国产操作系统,而不是伪创新

作者 | 郑丽媛责编 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;从国外操作系统的长期垄断到中国自主研发操作系统数十年的起落浮沉&#xff0c;技术自主创新独立已成为国产基础软件的主要突破口。近几年间&#xff0c;随着物联网时代的到来&#xff0c;以…

ASP.NET 学习历程

[注意我不推荐高级技术的书&#xff0c;因为你如果是个高手了就可以自己选择甄别书了&#xff0c;此文只对初学者&#xff0c;因为他们此时没有辨别好快的能力&#xff0c;本人几乎买尽所有的.NET书&#xff0c;有好有坏。] 你所看的第一本书对你以后影响最重要&#xff01;&a…

http头部消息中的cache-control解释

网页的缓存是由HTTP消息头中的“Cache-control”来控制的&#xff0c;max-age&#xff1a;&#xff08;只接受 Age 值小于 max-age 值&#xff0c;并且没有过期的对象&#xff09;max-stale&#xff1a;&#xff08;可以接受过去的对象&#xff0c;但是过期时间必须小于 max-st…

iframe自动调整高度能在IE5里实现吗

偶已经理解到style"height:expression(main.document.body.scrollHeight)"只对第一次显示的内嵌网页有效&#xff0c;如果里面的内容更新必须把主页刷新一遍才能自动适应新的高度&#xff0c;那么惟一的解决办法就是点击链接后整个页面都刷新一次&#xff0c;如何写成…

SQL Server-流程控制 5,Goto 语句

ylbtech-SQL Server:SQL Server-流程控制 5,Goto 语句SQL Server 流程控制中的 Goto 语句。 1&#xff0c;Goto 语句1 --2 -- 1, Goto语句3 -- Desc:Goto语句可以让程序跳转到一个指定的标签处并执行其后的代码。Goto语句和标签可以在程序4 -- 、批处理和语句块中的任意位置使用…

MLPerf基准测试再发榜,浪潮AI服务器刷新18项纪录

近日&#xff0c;全球倍受瞩目的权威AI基准测试MLPerf公布今年的推理测试榜单&#xff0c;其中浪潮AI服务器NF5488A5一举创造18项性能纪录&#xff0c;在数据中心AI推理性能上遥遥领先其他厂商产品。 MLPerf是当前全球最具影响力的AI计算基准评测组织&#xff0c;由图灵奖得主大…

Web充斥着存在漏洞的过期JavaScript库

虽然使用第三方软件库通常会降低开发的时间&#xff0c;但同时也会增加网站暴露出的攻击表面&#xff0c;对此我们应有充分的认识。因此需要保持第三方软件库的最新版本依赖&#xff0c;以便从安全更新中获益。即便如此&#xff0c;一份近期研究表明&#xff0c;在Alexa排名前7…

asp.net实现C#代码加亮显示

以下是代码片段&#xff1a;StringWriter textBuffer new StringWriter();Match match Regex.Match(HTMLStr,"/",RegexOptions.IgnoreCase | RegexOptions.Compiled);if(matchnull){Response.Write(HTMLStr);return;} string codeType match.Groups["codeType…

应用在大规模推荐系统,Facebook提出组合embedding方法 | KDD 2020

来源 | 深度传送门&#xff08;ID: deep_deliver&#xff09;Facebook团队考虑embedding的存储瓶颈&#xff0c;提出了一种新颖的方法&#xff0c;通过利用类别集合的互补分区为每个类别生成唯一的embedding向量&#xff0c;无需明确定义&#xff0c;从而以端到端的方式减小emb…

Android大图裁剪解决办法

某些功能需要拍照或者从相册选择照片后经过裁剪再上传的时候&#xff0c; cropp_w_picpath 可以调用手机自带的com.android.camera.action.CROP这个Intent进行裁剪 通过设置输出大小可以得到图片的大小&#xff1a; intent.putExtra(“outputX”, outputX); intent.putExtra(“…

day03-字符编码与转换

1、编码常识 在python 2中默认编码是 ASCII&#xff0c;而在python 3中默认编码是 unicodeunicode 分为utf-32 (占4个字节),utf-16(占两个字节)&#xff0c;utf-8(占1-4个字节)&#xff0c;所以utf-16 是最常用的unicode版本&#xff0c;但是在文件里存的还是utf-8&#xff0c;…

Asp.Net下的DataGrid的多层表头

先看下表&#xff1a; 业务员地 区 北京上海深圳张三100200300实际上Asp.Net下的DataGrid只不过是一个HtmlTable&#xff0c;只不过在HtmlTable的基础上添加了很多属性、方法&#xff0c;纳入ViewState机制&#xff0c;来生成、控制它&#xff1b;有了这一点认识&#xff0c;事…

Selenium的延迟等待

2019独角兽企业重金招聘Python工程师标准>>> Selenium的延迟等待分为 显式等待(Explicit Wait) & 隐式等待(Implicit Wait). 1.显式等待 显式等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到…

瞧瞧,这样的代码才叫Pythonic

来源 | Python编程时光&#xff08;ID: Cool-Python&#xff09;Python由于语言的简洁性&#xff0c;让我们以人类思考的方式来写代码&#xff0c;新手更容易上手&#xff0c;老鸟更爱不释手。要写出 Pythonic&#xff08;优雅的、地道的、整洁的&#xff09;代码&#xff0c;还…

linux基础(一)安装系统Centos6.5

安装有常用有&#xff1a;远程网络安装、U盘安装、光盘安装三种方式&#xff0c;以下为光盘进行安装1.出现引导界面&#xff0c;选择安装或升级现有系统&#xff0c;选择第一个安装系统。Install or upgrade an existing system 安装或升级现有的系统 install system with basi…

使用 .NET 对事件进行编程

作者:Ted Pattison  您可能已经对事件进行编程若干年了&#xff0c;但是迁移到 .NET Framework 仍然需要您重新检查事件的内部工作&#xff0c;因为 .NET Framework 中的事件位于委托的顶层。 对委托的了解越多&#xff0c;对事件进行编程时所具有的驾驭能力越强。 开始使用公…

tomcat项目自动发布脚本.脚本运行效果

./update -------------------------------------------------------------- | 确定特定用户执行,否则退出 | -------------------------------------------------------------- Yes,we are the user of testtomcat --------------------------------------------------…

11.11大促来袭,京东如何保障云安全?

2020年4月&#xff0c;国家发改委首次就“新基建”概念作出正式解释。云计算被纳入信息基础设施中的新技术基础设施。据IDC统计&#xff0c;2019年全球云计算基础设施规模超过传统IT基础设施&#xff0c;占全球IT基础设施的50%以上。云计算发展势如破笋&#xff0c;云计算也成为…

分享Kali Linux 2017年第11周镜像文件

分享Kali Linux 2017年第11周镜像文件 Kali?Linux官方于3月12日发布2017年的第11周镜像。这次维持了11个镜像文件的规模。默认的Gnome桌面的4个镜像&#xff0c;E17、KDE、LXDE、MATE、XFCE桌面的各一个&#xff0c;手机版的包括ARMEL和ARMHF。有最近要安装Kali?Linux系统的&…

实现无刷新DropDownList联动效果

在做一个文章添加功能时&#xff0c;想在选择大类后&#xff0c;自动将其所属二级小类显示出来&#xff0c;使用DropDownList的SelectedIndexChanged事件可以很容易实现&#xff0c;但每次选择后页面总要刷新一次&#xff0c;让人感觉很不爽。为实现DropDownList无刷新二级联动…

偷天换日,逼真的天空置换算法

责编 | 晋兆雨来源 | Jack Cui头图 | CSDN付费下载于视觉中国前言天空&#xff0c;是摄像中的一个关键元素。游戏的天空&#xff0c;我们可以随意调节&#xff0c;可以是晴空万里&#xff0c;也可以是风雨交加。现实的天空&#xff0c;我们也可以使用算法进行调整&#xff0c;算…

office2003/2007/2010版本降低宏安全设置方法

如果在公司内部环境中&#xff0c;因为各种系统对Office环境的要求&#xff0c;需要通过降低Office宏安全性的方法来提高系统访问效率的话&#xff0c;可以参考一下方法设置。 Office2003所需的设置如下&#xff1a; 1、打开Office2003&#xff0c;选择"工具"&#x…

【WEB API项目实战干货系列】- API登录与身份验证(三)

上一篇: 【WEB API项目实战干货系列】- 接口文档与在线测试(二) 这篇我们主要来介绍我们如何在API项目中完成API的登录及身份认证. 所以这篇会分为两部分, 登录API&#xff0c; API身份验证. 这一篇的主要原理是&#xff1a; API会提供一个单独的登录API, 通过用户名&#xff0…

ASP.NET中的页面指示标识

页面指示标识 的功能是用来确定在处理aspx文件的时候&#xff0c;需要系统做一些什么特殊的设定&#xff1f;它的语法是&#xff1a;<% directive attributevalue %> 比如&#xff1a;<%import namespace"System.Data"%> 注意属性之间需要空格&#…

⑨③-不能浪费拥有的年轻资本

⑨③-不能浪费拥有的年轻资本 老男孩语录⑨③-不能浪费拥有年轻资本 万两黄金易得&#xff0c;年轻资本难求&#xff01; 同学们&#xff0c;我们不能浪费比万两黄金还贵重的年轻资本&#xff0c;因为&#xff0c;转眼间你就不再拥有这个资本了&#xff0c; 趁着年轻&#xff0…

滴滴AI语音团队获国际顶尖智能对话系统竞赛世界第一

出品 | AI科技大本营头图 | CSDN付费下载于视觉中国近日&#xff0c;在国际顶尖人工智能竞赛第九届对话系统技术挑战赛&#xff08;DSTC9&#xff09;中&#xff0c;滴滴语音和NLP技术团队参与端到端多领域面向任务型对话系统任务荣获世界第一&#xff0c;充分彰显滴滴公司在自…

RHEL5+PXE+DHCP+Apache+Kickstart安装RHCE5.1 i386实验室环境

此博文出自&#xff1a;http://andrewyu.blog.51cto.com/1604432/1100567 使用RHEL5PXEDHCPApacheKickstart安装RHCE5.1 i386实验室环境&#xff0c;根据文章内容也可批量安装了红帽RHEL系统或CentOS5.x&#xff0c;现阶段&#xff0c;由于需要大规模应用CentOS5.8 x86_64系统用…

用ASP.Net(C#)连接Oracle数据库的方法

今天看了一下asp.net连接oracle数据库的方法&#xff0c;得到了如下代码。这段代码打开了MyTable表&#xff0c;并把操作员的名字列出。字段类型是OracleString。读取的时候用的是字段编号&#xff0c;我不知道怎么使用字段名来读取某字段的内容。下面是代码&#xff1a;//首先…

NLP任务中的文本预处理步骤、工具和示例

作者 | Viet Hoang Tran Duong来源 | DeepHub IMBA头图 | CSDN付费下载于视觉中国数据是新的石油&#xff0c;文本是我们需要更深入钻探的油井。文本数据无处不在&#xff0c;在实际使用之前&#xff0c;我们必须对其进行预处理&#xff0c;以使其适合我们的需求。对于数据也是…