热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

这个热到扑街的八月,我在学Vue

最近一个半月的学习就是一段不断上车、不断翻车、然后不断爬起来的过程。居住环境也比较恶劣,狭小昏暗通风不畅、白天室内温度足足有42°,能够对抗高温的只有一个小风扇,还时不时的停水断电,所以导致工作休息时

最近一个半月的学习就是一段不断上车、不断翻车、然后不断爬起来的过程。居住环境也比较恶劣,狭小昏暗通风不畅、白天室内温度足足有42°,能够对抗高温的只有一个小风扇,还时不时的停水断电,所以导致工作休息时间也不太稳定,白天太热了就小眯一会,热醒就爬起来写代码,热的失眠写通宵的情况也有发生。期间的迷惑、纠结与苦楚实在是难以言表。

源文件下载地址:https://github.com/gusuziyi/mall

 第一周比较顺利,在网易云课堂上2倍速看完了bootstrap,然后就找了三个网站开始山寨,中间尽管小有波折,但在bootstrap官网上基本都找到了解决方案,还顺便学会了怎样使用阿里的iconfont图标,这是一套字体矢量图标,在任何设备上都不会失真,与bootstrap的响应式思想十分契合;

 

 第二周在淘宝上五角钱买了一套vue视频,系统的学了一下,由于有7月份开发安卓App的经验,一周基本入门,然后结合bootstrap写了mall的v1.0版,实现了一个类似于购物车的小页面,这期间发现了mockjs,他可以拦截浏览器的ajax请求,然后返回随机生成的随机数,是一款很不错的测试工具。代码方面整体来讲并没遇上过多的障碍,因为就用一个vue对象,所有函数和变量在一起,修复bug很容易。


图片

 

 图一:用mockjs生成的随机数据

图片

 

图二:第2行编写调用mock函数

图片

图三:使用mock生成数据,我试了很久,除数字外其他数据都必须返回函数调用,否则会有无法实现Random方法,另外dataImage方法需要canvas支持,此处不影响,但在后来写V3.0版时node服务器会有报错

 

第三周开始学nodejs,淘宝上花五毛买了一套视频,跟着视频手撸了一套http服务器和路由器,然后在8888端口上实现了一个比较简陋的拼图游戏,如图四

 图片

       图四:用jquery实现的简易拼图游戏

      但这期间node让我费解的地方有两个,一个是callback是什么,如图五第12行,一个是为何在函数体内的this赋值,图六第5行,
     
图片

        图五

图片

        图六

在查过大量资料之后,终于理解了callback是处理异步低速函数的一种机制,由于读写硬盘与CPU运行相比极慢,所以程序运行后丢给readFile一个cb就不管了,什么时候硬盘读完了用cb把数据发送过来触发响应函数就行了,而this赋值则是js中的闭包概念,这样做的好处是能够避免变量遭到污染,那时我还不知道es6的存在,还不知道变量作用域提升,随处用的都是var,所以费了好大力气才理解这个闭包的概念,其中走的弯路一言难尽。之后开始学Mongo数据库,由于之前用过wamp,所以一天基本入门,然后在路由里面写出了增删改查方法,

 图片

如图七,mongo的add方法,第7、11行均为异步调用,此时已经理解了异步的原理

 

第四周开始学express+ejs框架,这个东西我觉得类似于多年前的cms系统,内部实现一套逻辑供前台调用,只是cms只需要理解前台调用,而express需要理解原理。没想到这个东西居然也属于前端范畴,看来这个前端行业挺不容易的。学完node来学express,感觉就像学完了js来学jquery,尽管都是集成好的东西,学习难度骤减,但是由于许多东西没有积累,也会踩不少坑,像下面这些:

 图片

图八:由于当时不知道子路由和路由重定向,结果纯手工实现的这些功能

图片

图九:对策略集里的通用函数复杂度估计不够,第4行开始只写了一个data,结果写到一大半的时候发现bug无法解决只能改结构,增加data1和data2,挺无奈的。。。

 

第五周,因为学会express,就开始改版之前mall,升级成V2.0,主要改动有两个,一是将mall页面搭设到本地express服务器上,如图十;二是将页面拆成层层嵌套的vue组件,这期间重点关注了关于组件间的数据通信:父子之间使用props,子父之间使用emit广播,兄弟之间使用数据总线,更复杂的数据交换还可以使用vuex。同时,为了各组件间可以共享数据和方法,将根节点绑定的vm定义为全局原型变量Vue.prototype。经过这个练习,也基本理解了MVC设计模式。

图片

图十:在express中渲染的mall页面

图片

图十一:在ejs中区分商店shop、商品item和总价totalsum三个vue组件

图片

图十二:组件中的控制代码

 

第六周先是学习了less与es6,然后特郁闷的发现项目中import和export始终无法正常使用,我一直怀疑是sublime上的babel没有调试好,但是始终查找不出问题,学习一度陷入停滞,后来无意中发现vue-cli,接触到工程脚手架这个概念,上手之后发现这个工具真是前端神器,所有的node模块都可以用npm集成过来,babel是默认内置的,而且组件模块化,全部都是单独的文件,加上严格的书写规范,非常适合多人合作项目,所以使用vue-cli把mall升级成了V3.0

 

首先介绍下文件夹目录树结构,设计的非常有条理性:build是后端服务器文件;config是服务器配置;dist是工程成品文件,使用npm run build 生成,全部兼容es5格式;node_modules是依赖包,由package.json索引,工程文件不必上传,根目录下使用npm install能够自动安装;src为工作目录,其中的assets为静态资源,componets为组件集合,router保存路由表,App.vue是app的入口组件,main.js负责绑定App组件、入口文件和路由表;static是内置的静态路由

图片

图十三:文件夹目录树结构

 

第一步我在后端另外搭建了jsonServer服务器,用于返回测试的mock数据,由于vue-cli默认占用8080端口,而我将jsonServer设置于3003端口,这导致前端的ajax访问涉及到跨域问题,我的方法是使用express的cors中间件,把整个3003端口全部设置成可以跨域访问,这就是使用node服务器的好处,否则在前端我们只有通过构造jsonp请求才能解决。

图片

图十四:将jsonServer设置于3003端口

图片

图十五:使用expresscors中间件解决跨域问题

图片

图十六:jsonServer的一些设置,注意第12行,jsonserver可以将ajax返回数据中的对象键值解析成express子路由,这样一份mock就可以支持多个页面数据查询,非常方便

 

后来我偶然发现在config/index.Js中可以直接设置代理转发proxyTable,这样就可以不用设置cors中间件了,如图十七第14行

图片

图十七:设置访问api接口转发至 http://localhost:3003/

 

由于想使用bootstrap,所以查了很久如何在main中引入jquery,相关资料真的寥寥无几,直觉告诉我可能思路不对,资料这么少,证明bootstrap也许并不适合vue,然后我就查vue用什么ui框架,结果主流的有两个element和iview,又要面临二选一,其实自学前端真的好纠结,经常要纠结于学哪个技术,框架要在vue、angular和react中三选一,预处理器要在less和sass中二选一,数据可视化要在highchart、echart和d3中三选一,UI更是要在万紫千红中N选一。然后element和iview纠结了许久,发现iview里面有两个i,我名字里也有两个i,觉得很投缘,就学了iview。和上面那些技术一样,也是出于一个莫名其妙的原因,就开始学了

图片

图十八:在vue-cli中引入jquery的方法

然后就是编写组件,由于预处理使用了less,可维护性大大提升了,如图十九,


图片

图十九:less

但是js还是踩到了许多坑,在不断纠结,不断试错,不断查找资料当中,总结出了以下七条难忘的教训:

一、 data必须定义成函数,同时返回对象

二、 computed与methods联系不大,它更像是data,一种没有输入但必须有输出的data

三、 想让props支持驼峰,必须定义成对象,例如props:{ isAllCheck:{} , shop:{}   },数组不可以

四、 Js中的大写到了template中会自动转成横线,template不支持大写,例如: ShopList会变成

五、 Watch中定义方法为 变量名:函数体,例如: isAllCheck(){  this.isCheck=this.isAllCheck }

六、可以在created 或mounted中监听广播,他们不是在创建时监听,而是会一直监听

七、可以在枚举时把:key="index"交给子组件,但子组件中不可调用index,会无法识别,正确的做法是子组件发出广播事件,在父组件中监听事件然后使用index

图片

图二十:最后的成品

虽然和之前的V1.0、V2.0看起来几乎一样,但是后台发生了翻天覆地的变化,由于还没解决node支持canvas的问题,无法绘制base64格式的随机颜色图片,v3.0相反还要更丑一点。

 

八月的最后一天,将将完成这个月的自学计划,走了不少弯路,但同时也学了不少知识,与七月底的迷茫不同,现在对九月份有十分清晰的学习目标,就是vue-cli、iview和webpack,8月份,自学的第二个月结束,希望自己还能坚持的住,加油

 

源文件下载地址:https://github.com/gusuziyi/mall


推荐阅读
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 本文详细解析了JSONP(JSON with Padding)的跨域机制及其工作原理。JSONP是一种通过动态创建``标签来实现跨域请求的技术,其核心在于利用了浏览器对``标签的宽松同源策略。文章不仅介绍了JSONP的产生背景,还深入探讨了其具体实现过程,包括如何构造请求、服务器端如何响应以及客户端如何处理返回的数据。此外,还分析了JSONP的优势和局限性,帮助读者全面理解这一技术在现代Web开发中的应用。 ... [详细]
  • 本文详细解析了如何使用 jQuery 实现一个在浏览器地址栏运行的射击游戏。通过源代码分析,展示了关键的 JavaScript 技术和实现方法,并提供了在线演示链接供读者参考。此外,还介绍了如何在 Visual Studio Code 中进行开发和调试,为开发者提供了实用的技巧和建议。 ... [详细]
  • 本文深入探讨了数据库性能优化与管理策略,通过实例分析和理论研究,详细阐述了如何有效提升数据库系统的响应速度和处理能力。文章首先介绍了数据库性能优化的基本原则和常用技术,包括索引优化、查询优化和存储管理等。接着,结合实际应用场景,讨论了如何利用容器化技术(如Docker)来部署和管理数据库,以提高系统的可扩展性和稳定性。最后,文章还提供了具体的配置示例和最佳实践,帮助读者在实际工作中更好地应用这些策略。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 浅析PHP中$_SERVER[
    在PHP后端开发中,`$_SERVER["HTTP_REFERER"]` 是一个非常有用的超级全局变量,它可以获取用户访问当前页面之前的URL。本文将详细介绍该变量的使用方法及其在不同场景下的应用,如页面跳转跟踪、安全验证和用户行为分析等。通过实例解析,帮助开发者更好地理解和利用这一功能。 ... [详细]
  • MySQL:不仅仅是数据库那么简单
    MySQL不仅是一款高效、可靠的数据库管理系统,它还具备丰富的功能和扩展性,支持多种存储引擎,适用于各种应用场景。从简单的网站开发到复杂的企业级应用,MySQL都能提供强大的数据管理和优化能力,满足不同用户的需求。其开源特性也促进了社区的活跃发展,为技术进步提供了持续动力。 ... [详细]
  • 今日精选:10款实用的jQuery随机效果插件
    在今天的精选内容中,我们推荐了10款实用的jQuery随机效果插件。这些插件不仅功能强大,而且设计精良,能够为您的网页增添独特的互动体验。从动态图像效果到文本动画,每款插件都提供了丰富的自定义选项,帮助开发者轻松实现创意视觉效果。特别值得一提的是,其中一款插件集成了与Google API的无缝对接,使数据展示更加生动和直观。 ... [详细]
  • 需求:在指定的DIV区域内点击时,需展示该区域内的附加操作面板;而在区域外点击时,则应自动隐藏该附加操作面板。通过精准的事件监听与处理,确保用户交互体验的流畅性和直观性。 ... [详细]
  • Select2.js下拉框应用总结与实践要点
    在使用Select2.js下拉框插件的过程中,积累了诸多实践经验与心得。尽管最初觉得Select2在某些方面不尽如人意,但在对比了其他选项后,发现其仍是最优选择。本文将详细探讨Select2.js的配置、优化技巧及常见问题解决方法,帮助开发者更好地利用这一强大的前端工具。 ... [详细]
  • 为何Serverless将成为未来十年的主导技术领域?
    为何Serverless将成为未来十年的主导技术领域? ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • 在软件开发领域,“池”技术被广泛应用,如数据库连接池、线程池等。本文重点探讨Java中的线程池ThreadPoolExecutor,通过详细解析其内部机制,帮助开发者理解如何高效利用线程池管理任务执行。线程池不仅能够显著减少系统资源的消耗,提高响应速度,还能通过合理的配置,如饱和策略,确保在高负载情况下系统的稳定性和可靠性。文章还将结合实际案例,展示线程池在不同应用场景下的具体实现与优化技巧。 ... [详细]
  • Django框架进阶教程:掌握Ajax请求的基础知识与应用技巧
    本教程深入探讨了Django框架中Ajax请求的核心概念与实用技巧,帮助开发者掌握异步数据交互的方法,提升Web应用的响应速度和用户体验。通过实例解析,详细介绍了如何在Django项目中高效实现Ajax请求,涵盖从基础配置到复杂场景的应用。 ... [详细]
  • 在编程中,`SyntaxError: unterminated string literal` 错误通常出现在使用 jQuery 或其他 JavaScript 库时,表示某个字符串字面量未正确闭合。这种错误通常是由于代码中的引号不匹配或缺失导致的,例如在字符串中意外地包含了未转义的引号字符。解决此问题的方法是仔细检查相关代码段,确保所有字符串都已正确闭合,并且引号已适当转义。此外,使用现代代码编辑器或 IDE 的语法高亮功能可以帮助快速定位此类问题。 ... [详细]
author-avatar
Irises---_372
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有