本文共 10307 字,大约阅读时间需要 34 分钟。
2019年8月6日。
这是我学习前端的第七天。 这一天,我学到了以下的知识。学习之前思考两个问题:什么是框架,什么是库
什么是MVC
MVC的核心理念是:你应该把管理数据的代码(Model)、业务逻辑的代码(Controller)、以及向用户展示数据的代码(View)清晰的分离开
通过MVC框架又衍生出了许多其它的架构,统称MV/*,最常见的是MVVMVue与Angular就是一个MVVM框架,MVVM与MVC最大的区别是模型与视图实现了双向绑定(即数据更新,页面也会同步更新,反之亦然)
在MVVM架构下,View 和 Model 之间并没有直接的联系,而是通过ViewModel进行交互,Model 和 ViewModel 之间的交互是双向的, 因此View 数据的变化会同步到Model中,而Model 数据的变化也会立即反应到View 上
Vue.js 可以说是MVVM 架构的最佳实践,专注于 MVVM 中的 ViewModel,不仅做到了数据双向绑定,而且也是一款相对来比较轻量级的JS 库,API 简洁,很容易上手。
AngularJS通过为开发者呈现一个更高层次的抽象来简化应用的开发。如同其他的抽象技术一样,这也会损失一部分灵活性。换句话说,并不是所有的应用都适合用AngularJS来做。AngularJS主要考虑的是构建CRUD应用。幸运的是,至少90%的WEB应用都是CRUD应用。
易用:已经会了HTML,CSS,JavaScript?即刻阅读指南开始构建应用!
灵活:简单小巧的核心,渐进式技术栈,足以应付任何规模的应用。
性能:超快虚拟 DOM 、最省心的优化
官网的文档,就是最好的学习资源了,没有比他更好的了,地址:
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与 现代化的工具链以及各种 支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
不适合SEO、交互频繁的,如游戏之类交互体验网站。
{ {要插入的值}}
,此时相当于占位符,到时候{ {关键字}}会被替换成 Model中的数据 bug点: 当网速较慢时,Vue初始化未完成时,插值表达式不能被解析,会直接显示 出来,加载完毕之后又会被替换成真实结果,造成闪烁(Vue的加载代码写在 HTML元素之后时会出现该bug)特点: 当Vue加载完毕后,v-cloak属性会自动消失 使用: 添加如下CSS样式:让所有带v-cloak属性的元素隐藏,Vue加载完成后显示 实现,解决插值表达式闪烁的问题{
{msg1}}
[v-cloak]{ display: none; }
v-text:
语法:<p v-text="msg1"></p>
作用:和插值表达式一样,用于给HTML元素添加文本 区别: 1. v-text不会存在闪烁问题 2. v-text会将Model中的数据完全替换到HTML元素中(覆盖) 3. 插值表达式只会将Model中的数据替换到插值表达式中(占位符内容的替换) 相同点: 1. 插值表达式和v-text都可以给HTML元素显示文本 2. 插值表达式和v-text都不会解析要添加文本中的HTML标签(原样显示) v-html:
和v-text的唯一区别:给HTML添加内容时会解析内容中的HTML综合运用案例如下:
v-cloak、v-text、v-html指令以及插值表达式的学习 v-cloak、v-text、v-html指令以及插值表达式的学习
{
{msg1}}{
{msg1}}{
{msg2}}
v-bind:
语法:在HTML元素的属性目前加上绑定标识,此时HTML的该属性的值就会根据属性值的名字从Model中获取数据 示例:var vm = new Vue({ el:"#app", data:{ msg:"我是来自Model中的内容!", name:"李师师" } });
注意:
1. 【v-bind:】用于绑定HTML元素属性的值 2. 【v-bind:】可以简写为: 3. Vue框架会把使用了v-bind:标识的HTML的属性的值当作一个Javascript表达式来使用 只要表达式合法,就能执行(当然,数据必须时字面量或来自于Model中) 如::value="msg+'你好'":value="msg+name"
v-on:
语法:在HTML的事件属性(不带on)前加上绑定标识,此时HTML触发此事件时,会执行事件中绑定的代码 示例:var vm = new Vue({ el:"#app", data:{ msg:"我是来自Model中的内容!", name:"李师师" }, methods:{ sayHello:function (name) { alert("你好!"+name); } } });
注意:
1. 常见的web网页的事件都支持绑定 2. 事件名字不带on 3. 事件触发的方法必须在methods中定义 4. v-on标识的属性会被Vue解析为特定JavaScript,只要内容符合JavaScript规范 都能正确执行(比如传入参数) 5. 【v-on:】等价于【@】综合运用案例如下:
v-bind、v-on指令的学习 v-bind、v-on指令的学习
知识点:
v-on:指令或@
v-html指令
定时器(正确启动和停止)
字符串截取
ECMAScript6新特性
this对象指代
【入坑】
1. 在Vue对象vm的作用域外去使用Model中的数据或methods中定义的方法 2. JavaScript对象属性、方法赋值时使用了=号,应该使用:号,如age:56 【ECMAScript6的新特性】 1. 给JavaScript对象方法定义值时 标准:sayHello:function(){}
ES6:此时,方法名sayHello会作为对象的属性方法值sayHello(){ }
2. 箭头函数的使用 标准:setInterval(function(){ //此时this对象时Window对象 },500);
ES6:可以把外部环境传入箭头函数所指向的函数内部setInterval(() => { //此时this对依然是外部的this },500);
【知识点】 1. 定时器的使用 步骤1:定义全局的定时器编号,初始值为null 步骤2:判断定时器编号是否为null 如果不为null,直接返回(表示此时定时器已经启动,不可重复启动) 如果为null,则使用setInterval()
启动定时器,并保存定时器编号到全局定时器变量中 步骤3:停止定时器 使用clearInterval()
停止定时器,并把全局的定时器编号变量赋值为null 便于下次继续启动 2. Vue对象 vue对象中data、methods里面声明的内容全部都会成为vm的直接属性、方法 所有这些内容应该直接使用this访问,而不是【、()】 代码如下: 使用Vue实现跑马灯效果 使用Vue实现跑马灯效果
|
唯一的一个实现双向数据绑定的指令
语法:data:{ num1:'0', num2:'0' }
适用元素:
双向绑定:
【知识点】
JavaScript的eval()方法可以把一个字符串当作JavaScript代码执行,并返回执行结果,如下所示:this.result = eval("parseInt(this.num1)"+this.opr+"parseInt(this.num2)");
注意:
当代码很复杂或难以控制时可以使用此方法,大多数还是使用标准方法执行JavaScript代码Vue中的双向数据绑定指令v-mode Vue中的双向数据绑定指令v-mode
使用v-model双向数据绑定实现建议计算器
语法:
用法:
1.使用v-for指令遍历简单数组
{
{name}}
2.使用v-for指令遍历对象数组
id:{
{user.id}}---name:{ {user.name}}
3.使用v-for指令遍历对象属性值
{
{key+'--'+value}}
4.使用v-for指令遍历数字(作用就是标准的for循环次数遍历)
【注意】
测试代码如下:
Vue中的for指令 Vue中的for指令
{
{name}}
id:{
{user.id}}---name:{ {user.name}}---age:{ {user.age}}
{
{key+'--'+value}}
Vue中的for指令实现数据绑定
v-if和v-show的区别?
使用技巧:
v-show
v-if
代码技巧:
如果使用vue绑定的方法只有一句代码,则可以直接写在绑定结果中
代码演示
Vue中的if和show指令 使用vue中的v-if和v-show指令实现元素的显示和隐藏
我是使用v-if控制的p标签
我是使用v-show控制的p标签
自定义过滤器:
Vue全局过滤器:Vue.filter("过滤器名字",function(data,param1,param2...){ });
{ {msg|v-过滤器名字(参数值1,参数值2...)|过滤器2...|过滤器n...}}
Vue具体对象(特定作用域)过滤器:
var vm = new Vue({ el:"#app1", data:{}, methods:{}, filters:{ 过滤器名字:function(data,param1,param2...){ }或 过滤器名字(data,param1,param2...){ } } });
【注意】
代码实现
在Vue中自定义过滤器 在Vue中自定义过滤器
{ {msg|replaceWords('我','他')|addStartInfo('----')}}
{ {msg|replaceWords('你','我')|addStartInfo('----')|addEndInfo('~~~~~')}}
自定义指令:
系统内置: v-cloak、v-text、v-html、v-bind、v-on、v-for、v-if、v-show、v-model 自定义: 全局:生命周期函数的参数说明:
语法:
Vue.directive("指令名字",{ bind:function (el, f, vnode) {}, inserted:function (el, binding, vnode, oldVnode) {}, update:function (el, ref, vnode) {}, componentUpdated:function (el, binding, vnode) {}, unbind:function (el, binding, vnode, oldVnode, isDestroy) {} });
局部:
语法:var vm = new Vue({ el:"#app", data:{}, methods:{}, filters:{}, directives:{ 指令名字1:{ bind:function(){}, inserted:function(){}, update:function(){}, componentUpdated:function(){}, unbind:function(){} }, 指令名字2:{} .... } });
简易定义方式:
Vue.directive("指令名字",function(el,binding,vnode,oldVnode){ 此时function中的代码会作用到bind和inserted钩子函数上 });
【注意】
Vue.directive("color",{ bind:function (el,binding) { //css样式可以在bind中设置 el.style.color=binding.value; //获取指令传递过来的数据(可以是任意数据类型) }, inserted:function (el,binding) { //JavaScript效果等需要在inserted中设置 el.focus(); } });
代码实现
在Vue中自定义过滤器 在Vue中自定义过滤器
{ {msg|replaceWords('我','他')|addStartInfo('----')}}
{ {msg|replaceWords('你','我')|addStartInfo('----')|addEndInfo('~~~~~')}}
转载地址:http://fpcen.baihongyu.com/