验证码机制
在后端里,总是认为前端有可能会被伪造。页面上的验证码是后端随机产生的(也可以前端生成,但不建议)
步骤:
- 1.后端调用相关的绘图第三方类库,或是(平台PHP,.NET,Java)系统核心绘图类库进行图片的绘制
- 2.绘制的那些随机的数字、字母都是后端预先定义好的
- 3.绘制图片的URl地址通过网络发送给客户端,然后,客服端可以通过img标签去引用这个验证码的地址
- 4.后端在绘制完毕验证码后,随机选择生成的字母不能丢弃而是需要保存到session中,可用于识别哪个用户
- 5.当客服端输入验证码完毕后会提交表单,后端会拿到相关数据与session中的验证码进行比较,一样则通过
前端发展史:
原生JS----jQuery之类的类库----模板引擎----MVVM框架
- 原生JS:API难懂,还得兼容各种浏览器
- jQuery:解决了浏览器兼容问题,但还是得频繁的操作DOM元素,不断的拼接字符串,心力交瘁
- 模板引擎:只需要调用模板引擎提供的一些方法就可以把DOM元素生成,不需要开发者自己渲染页面
- MVVM框架:
MVVM一直与MVC一起出现在文章中,要注意区别他俩:- MVC是后端开发分层开发概念
- MVVM是前端视图层的概念,主要关注于视图层分离
Model: 数据的拥有者,实现具体的业务逻辑,是业务逻辑模型而不是数据模型。
View: 具体的用户界面,如按钮、列表、图片。
Controller: 负责将 View 中用户的动作传达给 Model,将 Model 的数据通过 View 展现出来。
模型(Model):数据模型
视图(View):调用ViewModel的方法并响应变化。
视图模型(ViewModel):业务逻辑。
前端三大主流框架:
- Vue.js
很火,能开发手机APP,需要借助weex
适合做单页面应用程序 - React.js
很流行,也能开发手机APP
适合做单页面应用程序 - Angular.js
适合做单页面应用程序
框架和库的区别:
框架
提供一套完整的解决方案,对项目的侵入性较大,项目如果需要更换框架,则需要重新架构整个项目
库
提供小功能,类似一个插件,对项目侵入性小,如果某个库无法完成需求,可以很容易切换到其他库实现需求。
例如从jQuery切换到zepto,从EJS切换到art-template
Vue.js 是什么
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
vue让开发者不用关注DOM操作,只关注业务逻辑
Vue.js的代码与MVVM之间的对应关系
Vue的基本代码结构和插值表达式
......
{{msg}}
......
当用script引入vue时,window中多了一个vue的构造函数,通过new,创建一个vue对象vm。
el:表示这个vue实例控制的页面区域,不能绑定到body上面去
data:存放el中要用到的数据,通过指令或者插值表达式渲染到页面。
指令:在后面的模块学习
插值表达式{{}}:花括号里边写数据的名字
vue的指令
-
v-cloak:解决页面加载闪烁
当网络很差,或者其他一些原因导致页面加载闪烁,出现指令或者标签,非常影响用户观感,可以用这个指令解决。
通常是下面这样两种情况时会发生闪烁:
{{msg}}
//插件表达式时闪烁
解决办法:给挂载元素添加v-cloak指令,再在style里边定义一个样式就可以了
.......
{{msg}}
......
-
v-text
写法:
作用:将msg显示在页面上。
v-text指令与插件表达式的区别与相同点
-
- v-text没有加载闪烁问题
-
- v-text会覆盖元素原本的内容,但插值表达式只会替换占位符
-
- v-text 与差值表达式都会把msg当成普通文本来处理
{{msg2}}
......
msg2:"我是h1标签
"
那么,如何渲染msg2呢?
-
v-html
渲染带有标签的文本,会覆盖原本的内容
//添加这句
hhhh
jjjj
v-bind 绑定属性
写法:
那该怎么办呢?用v-bind标签
v-bind指令在解析变量时,当成了js表达式去解析,故而可以有如下写法:
v-on 添加事件
写法:
......
//或者
点击
......
事件修饰符
- .stop:相当于JavaScript中的event.stopPropagation(),防止事件冒泡
......
......
这种情况就是事件冒泡,原生JS通过event.stopPropagation()阻止,在vue中,可以通过.stop来阻止。
- .prevent:相当于JavaScript中的event.preventDefault(),防止执行预设的行为(如果事件可取消,则取消该事件,而不停止事件的进一步传播)
比如a链接有默认的跳转行为,下面的demo点击后会执行函数并跳转页面,可若我们不想跳转页面的话,该怎么办呢?
......
linkClick:function(){
console.log("触发了链接的点击事件");
}
改为下面这样就好了
跳转到百度
-
.capture:添加事件侦听器时使用事件捕获,与事件冒泡的方向相反,事件捕获由外到内
略微修改阻止冒泡的demo代码
这是因为先因为捕获机制执行了outer,再默认冒泡机制执行inner和middle,如果想从外到内依次执行的话,给middle也加上捕获机制
- .self:只会触发当事件在该元素本身的事件(不包含子元素)
点击按钮并没有执行outer,但是执行了outer,这是.self跟.stop的区别
- .once:事件只会触发一次
点击第一次,阻止了默认行为,触发了点击函数,点击第二次的时候,没有触发点击函数,默认行为也执行了(即跳转到了百度页面),调换事件修饰符位置效果也一样
注意事件修饰符可以连用
区别事件修饰符的应用场合
.self:只阻止自己的冒泡,外层还能继续冒泡
.stop:阻止了自己及往外层的的冒泡行为
v-model:表单元素的数据双向绑定
只能用于表单元素中
比如有一input,我们想要获取输入的值,按照学习,应该是用v-bind绑定我们的value属性
......
msg:"双向数据绑定",
原因就是v-bind只能单向绑定。修改为:
在vue中使用样式
一、使用class样式
原生形式:
这是一个h1标签