Vue.js---------------1引入

Vue.js

概念梳理

vue是UI层的渐进式框架,现在还不理解这个名词,学完会理解的。(渐进式:老项目用的jQuery,无法一次性迭代完毕,可以3个页面用vue,其他依然用jQuery,即渐进式。)
既然谈到框架,谈谈几个概念:工程化   软件工程    类库    框架 
软件工程的目的是为了复用,不是低级的copy而是符合开闭、理氏、依赖倒转等原则的高级复用。
工程化:一个工作如何分配给多人,二多人是协同配合开发,前端工程化webpack就和maven一样难用
类库:打开即用,import 类,然后就可以使用
框架: 编写代码时你就是上帝,你想用什么对象就可以创建什么对象。框架就像造物主的世界观,我说是红色的水那么水就是红色的,我的地盘听我的,这个框架就是发明者的地盘,当然做的都是积极的,便捷的事情,框架是更高级的复用。
复用:只要是开发肯定会copy,但是能不能高级的copy---复用呢,就像我用java写过一个商城,定义一个响应类,里面的构造函数根据不同的参数可能写了8种,那时放弃了java,感觉java太严格了,不符合我的性格,更喜欢python的弱类型。
 
代码保持一定程度的封装,写完的东西可以拿过去复用,但是你不可以改里面的东西,因为你不知道人家为什么这么写,改了之后好比汽车发动机被你卸掉,不能工作了。
你只需要插上钥匙,启动开车即可。
最低级的复用:一段代码拷贝一下,黏贴到了另一个py文件中,是功能完成了,项目的体积也变大了,过了几个月,重新维护项目,里面充斥大量冗余的代码,自己都不认识了更别说别人了。
更高级的复用:既然可以不用修改就可以使用说明很多东西是可以配置的,这个要求就高了,按照这种原则发展起来的就是框架了。
看框架的时候会很茫然,为什么简单的东西要写的这么复杂看不懂,其实让你难以理解是因为框架开发者抱着方便开发者的目的思维在思考,如何将代码高级的复用,让开发更迅捷。

vue简介

变成了自动驾驶

背景:

1:js框架,尽管已经有了jQuery,但是jquery还是需要你动手去操作dom。jQuery是命令式,vue是声明式,jQuery渐渐退出历史舞台。

2:ES6之前js没有OOP,尽管可以做成闭包,但是很丑陋,可读性弱。

3:原来的网页和静态页面几乎无异, ajax还好一点,比较平滑,就像图片一样频繁刷新无所谓,但是越发展越无法容忍,因为需求越来越像app。

刷新的本质是摧毁原来的dom,进行重新渲染,关键恶心的是原来页面里面的数据没有了,上一个页面的变量不能携带到下一个页面

举个不会这么做,但是道理一样的例子,第一页写username,第二页写密码,写完第一页到了第二页,username不想用了,要退回去,退回去不希望username是空,因为我只改一个字母

此时你就不得不做恶心的事,要么把上一个页面的数据寄存到一个地方,到了下一个页面再把数据取出来放到新的页面里面,这是最恶心的,通常放session中,再就是放redis中,要么就放数据库里面。

放到远端,传回来又要时间,访问量高了服务器压力立马上来了。

4:因此出现了SPA:single page application概念,单页面应用,页面全程无刷新,在一个dom里面来回切。

js框架发展史

第一代:jquery自己操作dom,尽管比原生js好的多,代码量少了,但是程序员还是需要调用api去操作dom。

第二代:MVC,代表就是react,尽管这是前端的模型,让我想起做java用的ssm搭建的框架,尽管现在都用springCloud等,干重复的事,笨重。

对于后端来讲,M指的数据库,V指的前端,C指的controller(开个接口,写sql查到数据返回到前端)

对于前端来讲,为了工程化,为了更加清晰工程

Module:本身就有的数据或者后端传过来的json,存放数据

View:视图层,用于更新dom就是html

Controller:通过逻辑处理调用Module给View进行处理

Vue.js---------------1引入_第1张图片

此时你要做两件事:1.后端开个接口,写sql拿到数据,用json传回前端

          2.前端拿到json用jQuery来提取不同字段到对应位置进行显示

         3.操作dom将不同数据放到不同的位置进行显示。  

以前经常做的就是,对于相同一张表做不同的逻辑处理,例如同一张表选不同的数据,放到不同的终端显示

在MVC里面最重要的就是复用!     

好的PC端项目完成了。

沙雕项目经理来了,做个手机端吧,数据换种处理方式,那个lol的账号等级的字符串不用了,删掉,咔咔咔一顿重复操作,写了一个新的接口,新的sql,手机端项目完成了。

妈的沙雕项目经理又来了,做个ipad端吧,这次加个别的字段,然后做成图标的形式,咔咔咔一顿重复操作,又新写了一个接口和sql,对数据一顿算,传到前端,ipad端项目完成了。

问题是:数据库底层的表是同一张,逻辑层你开了三个接口和三个sql,三个终端收到三份data,但是里面很多的重复代码。

三个接口,三个data,三个view,但是其实做的都是类似的事情,查的同一张表,类似的数据处理,但是开了三个接口,没有复用。

再来一个终端和需求,又重新写一个接口一个data一个view,为什么不能写在一起,有什么不能写在一起呢?

归根结底到数据库中都是一张表, 是你做了数据裁剪,Module能复用么?可不可以只有一个接口?

可以,用相同的接口传相同数据到前端,再来一个终端,是不是又要copy一遍接口呢?

 

三个不同的Controller,C和V能集合么?

再来一个项目,拿data的逻辑代码是不是还要重写一遍,此时又要copy

因为大家都用MVC,大家都用我也用呗。

现在要做的是不能copy,只要增加view,只要数据层不动,那么view就不动。

此时就要把Module拆出来,做成一个对象,他有独立的方法,在java中就是做一个独立的类或基类,完成数据从数据库拉出来,放在data的事情。

因为view不同,而data一样,此时data就要拿出来,此时data就是做成黑盒,不能改拿过来直接用,高级复用,分为简单的copy代码。

此时Module切出来了,此时任何一个不同的view都要和module结合起来,中间就会产生三种不同的controller

为什么C不能独立出来呢?

ok举个例子,沙雕项目经理说上个项目废掉,做一个新的,数据库进行了重新设计,此时页面不变,view会得到复用,就是说同一个view对应不同的data,因为数据库底层数据表重新设计了

此时C是无法复用的,因为C是和data相关的,它去拿数据

 

一个单独的v和一个单独的M决定了一个C,此时VC是无法合并的,M V C必须全部拆开单独存在,这就是MVC框架。这么切就是为了复用,不允许改变里面代码的情况下复用。

Controller会调用Module,给View进行渲染使用

Module变会通知C,C也可以控制M(ajax后台加载数据),

因此你只要改数据就可以了,数据变了之后View要怎么改,你只要把规则讲好,什么时候改怎么改都有框架自动完成

原来是发现数据改了,你自己把数据拿过来,然后自己爬dom tree,把数据一个一个放上去,还要自己把旧的数据删除掉

有了Vue你就直接配置好,数据一变动,vue里面的controller会去改变view

vue将controller的角色换成了VM(Vue Module)将M和V双向绑定

MVC里面的view变动是没有办法通过controller回到module里面,就要你绑定事件,然后回到module中

主要是M和V复用,剩下的东西交给controller

MVVM中VM充当Controller,对M和V都进行双向绑定,你不用绑定事件,将数据回到module中了,VM帮你做了而且是自动帮助你,

Module和View是孤立的,谁都不知道对象

vue对象充当了VM,形成双向绑定,Vue监听View的变化,用的listener

从Module侧面看,数据绑定帮助更新View即dom

dom绑定监听一旦触发事件,vm就会去更改module

而module之所以可以通知vm,是因为module都被加工成了get和set,一旦改了就知道谁依赖他

用的是watcher,vm就去更新dom

这就是vue.js的精髓

 

 

需求再变,用户填写的信息后进入下一个页面,尽管此需求很少,此时你能做的就是把信息传入到后台服务端,找个地方存着,然后到了下一个页面从session中或redis或数据库中拿到,然后再封一个controller,通知View,老弟麻烦再渲染一下。

上面三个终端用了同一份数据改了一个需求,做了三个controller,后台可能对应的都是同一个sql查询语句。

可不可以开一个接口,三个终端用同一份data呢

 

用了vue就不要再去操作dom,别用jquery的选择器,别用原生js的getelementbyid,用了就剁手。

 

 

 

你可能感兴趣的:(Vue.js---------------1引入)