Vue.js

1.0  MVVM

MVVM(Model-View-ViewModel)

Model(模型):由核心的业务逻辑产生的数据对象,例如从数据库取出并做特定处理后得到的数据

View(视图):即用用户界面

ViewModel(视图模型):用于链接匹配模型和视图的专用模型

2.0  CDN

CDN,是指内容分发网络。通过构建分布式的内容分发网络,用户可以就近获取所需内容,这样可以提高用户访问的响应速度和命中率。有些提供商会免费提供常用框架的JavaScript文件的CDN服务,但是在商业化应用的过程中,需要注意版权问题。使用CDN方式引入Vue.js文件后,就不需要在本地部署该文件了。

3.0  键值对

任何一个对象的成员要么是数据成员,要么是函数成员。但无论是数据成员还是函数成员,在本质上都是一个"键-值"对,"键"是这个成员的名字,"值"是这个成员的内容。对于函数成员来说,"键"是函数的名字,"值"是函数的地址。因此,只要能够描述一个函数的名字和这个函数将要执行的操作就可以了。

4.0  字符串模块

字符串模块是ES6新增的一种语法,它以"`"符号开头和结尾,代表了普通字符串开头和结尾的单引号和双引号。使用模块字符串的另外一个优点是:可以跨行,直接产生多行文本。

5.0  生命周期钩子

1.beforeCreate():在实例创建之前调用。

2.created():在实例创建之后调用,此时尚未开始DOM编译。

3.beforeMount():在挂载开始之前调用

4.mounted():在实例被挂载后调用,这时页面的相关DOM节点已被新创建的vm.$el替换。它相当于JavaScript中的window.onload()方法。

5.beforeUpdate():每次页面中有元素需要更新时,在更新前就会调用beforeUpdate()钩子函数。

6.updated():每次页面中有元素需要更新时,在更新完之后就会调用updated()钩子函数

7.beforeDestroy():在销毁实例前调用,此时实例仍然有效。

8.destroyed():在实例被销毁之后调用。

6.0  数组侦听

当通过下列方法操作或更改数组时,变化可以被侦听到。这些方法包括:

push(): 尾部添加

pop():  尾部删除

unshift():头部添加

shift():头部删除

splice():删除,添加,替换

sort():排序

reverse():逆序

类似地,数组还会经常用到另一些方法,例如 filter() concat()  slice()等。它们不会变更原始数组,而是返回一个新数组。当使用这些非变更方法时,可以用新数组替换旧数组,这样也可以侦听器感知到数组的变化

由于受早期版本的JavaScript(ES5)的限制,在Vue2中并不能侦听到数组的某些变化,包括下列两种情况。

直接通过下标的方式来修改数组,例如vm.items[5] =new Value。

直接通过修改数组的length属性的方式来修改数组,例如vm.items.length =10

还有一种情况就是数组元素是一个对象,而我们改变的是数组元素的一个熟悉,例如vm.array[3].x=10

对于直接修改数组元素的情况,可以使用Vue.js提供的$set()方法。例如 vm.$set(vm.array[3],'3',10)。

如果使用了push()等标准的数组操作方法,那么可以被侦听到。

如果彻底替换为一个新的数组,那么可以被侦听到。

如果直接修改数组的元素,那么无法被侦听到,解决方法是使用$set()方法修改元素的内容,只有这样才能被侦听到。

如果侦听器已通过"{deep:true}" 设置为"深度侦听"的,那么当修改对象元素的属性时,可以被侦听到。但是,如果是元素本身被修改,那么依然无法被侦听到。

如果侦听器没有被设置为"深度侦听"的,那么对象的属性可以用$set()方法来修改,从而实现此修改被侦听到的目的

不要通过length属性来修改数组长度,而改用其他标准方法显示数组长度的变化

7.0  事件对象中的常见属性

标准DOM类型读/写说明
altKeyBooleam读写按下Alt键则为true,否则为false
buttonInteger读写鼠标事件,值对应按下的鼠标键
cancelableBooleam只读是否可以取消事件的默认行为
stopPropagation()FunctionN/A阻止事件向上冒泡
clientXInteger只读鼠标在客户端区域(当前宽口)的水平坐标,不包括工具栏,滚动条等
clientYInteger只读鼠标在客户端区域(当前宽口)的垂直坐标,不包括工具栏,滚动条等
ctrlKeyBooleam只读按下Ctrl键则为true,否则为false
relatedTargetElement只读鼠标正在进入/离开的元素
charCodeInteger只读按下按键的Unicode值
keyCodeInteger读写按下按键时为0,其余情况下为按下按键的数字代号
detailInteger只读鼠标按键的单机次数
preventDefault()FunctionN/A阻止事件的默认行为
screenXInteger只读鼠标相对于屏幕的水平坐标
screenYInteger只读鼠标相对于屏幕的垂直坐标
shiftKeyBooleam只读按下Shift键则为true,否则为false
targetElement只读引起事件的元素/对象
typestring只读事件的名称

8.0  事件修饰符

.stop

.stop事件修饰符会自动调用stopPropagation()方法,从而阻止事件的继续传播。

.self

.self事件修饰符的作用是,仅当一个事件的目标是当前元素自身时,才会触发处理函数。也就是说,内部的子元素不会触发这个事件。也就是说,只有单击的对象是绑定的对象本身(外层div)时,才会触发事件。如果是从内层对象(内层div) "冒泡"上来的话,则不会触发事件。

.capture

.capture事件修饰符的作用是改变事件流的默认处理方式,从默认的冒泡方式改为捕获方式。当没有.capture事件修饰符的时候,如果单击内层div,就会先弹出一个提示框,显示"内层div被单击",之后再弹出另一个提示框,显示"外层div被单击"。也就是说,默认情况下先触发内层元素的事件,并在冒泡之后才触发外层元素的事件。

.once

.once事件修饰符的含义是只触发一次事件。如果给外层div增加.once事件修饰符,那么每次刷新页面以后,只有第一次才会弹出提示框,此后单击时都不会再弹出提示框。

.prevent

在添加了.prevent事件修饰符以后,程序就会自动调用event.preventDefault()方法,从而取消事件触发的默认事件

9.0  v-model修饰符

v-model指令在绑定的时候,也可以指定修饰符,以实现一些特殊的约束或效果。

.lazy :

对于文本输入框,默认情况下,v-model指令在每次input事件触发后,都会对文本输入框的值与数据进行同步。通过添加lazy修饰符,可以将上诉行为改为在change事件触发之后进行同步,这样就只有在文本框失去焦点后才会改变对应的模型属性的值,因此称为"惰性"绑定。

.number

如果希望用户输入的值能够自动转为数值类型,那么可以给v-model指令添加.number修饰符。

.trim

如果要自动过滤用户输入的首尾空白字符,可以给v-model指令添加.trim修饰符。

10.0  key属性的作用

Vue.js会尽可能高效地渲染元素,并且通常会复用已有元素而不是重新构造DOM结构。这样做除了能够提高性能之外,还有其他一些好处。但是,在实际项目中,这样做不一定符合实际需求。如果我们希望在更换登陆方式以后,文本框中的内容也随之清除。Vue.js提供了一种方法来告诉渲染引擎"这两个元素是完全独立的",即添加一个具有唯一值的key属性。

11.0   v-if和v-show的区别

Vue.js还提供了一个与v-if类似的指令v-show,v-show也可以用于根据条件展示元素,且用法和v-if一致。它们的区别在于,v-if操作的是DOM元素,而v-show操作的是元素的CSS属性(display)属性。此外,v-show不能与v-else配合使用。v-if运行后DOM根本就不存在,但v-show有DOM但不显示.

v-if是"真正"的条件渲染,因为它会确保在切换过程中条件块内的事件侦听器被销毁和重建

v-if是"惰性"的,即如果在进行初始渲染时条件为假,则不会渲染,直到条件第一次变为真时,才开始渲染相应的DOM结构.

v-show相对简单,不管初始条件是什么,元素总是会被渲染,并且还会基于CSS的display属性进行切换

通常,v-if的切换开销更大,而v-show的初始渲染开销更大。因此,如果切换非常频繁,建议优先使用v-show;而如果在运行时条件很少改变,则使用v-if效果较好。

12.0 v-for和v-if一同使用的注意事项

v-for的优先级比v-if高,v-for每次迭代时都会执行一次v-if,这会造成不必要的计算开销,影响性能,尤其是当只需要渲染很小一部分的时候,表现尤为明显。比较好的做法是直接在数据模型中队列表进行过滤,以减少视图中的判断。在这种情况下,可以使用计算属性,在数据模型中事先做好处理,然后将符合条件的结果v-if显示出来。

13.0  父子组件之间传递数据的方法

组件时Vue.js开发中的基本单元,组件之间不可避免地需要传递数据。

从父组件向子组件传递数据是最主要的方式,可通过组件的props(属性)和slot(插槽)来实现。

所有props都使得其父子props之间形成了一种单向的下行绑定;父级props的更新会向下流动到子组件中,但是反过来则不行,因为这样会防止从子组件意外变更父组件的状态,从而导致应用的数据流向难以理解。

此外,每次父组件发生变更时,子组件所有的props都将刷新为最新的值,这意味不应该在一个子组件内部改变props。如果这样做了,Vue.js会在浏览器的控制台发出警告。

子组件在通过props得到从父组件传来的数据之后,应该复制出本地副本,或者通过计算属性的方式使用这些数据,而不应该直接修改props属性的值

从子组件向父组件传递数据

如果子组件需要向父组件传递数据,就需要使用事件机制来实现。总结起来就是"从上向下通过属性传递数据,从下向上通过事件传递数据"。

当子组件向父组件传递数据时,需要通过$emit()方法向父组件暴露一个事件,然后父组件在处理这个事件的方法中获取子组件传来的数据。

14.0  单页应用

单页应用的说法是在JavaScript和AJAX技术比较成熟以后才出现的,指的是通过浏览器访问一个网站时,只需要加载一个人口页面,此后显示的内容和数据都不会再刷新浏览器页面。

单页应用多页应用
页面结构一个页面+许多模块的组件很多完整页面
体验效果页面切换流畅页面切换慢,网速不好的时候,体验效果不好
资源文件公共资源只需要加载一次每个页面都要加载一次公共资源
路由模式可以使用hash,也可以使用history使用普通链接进行跳转
适用场景对体验效果和流畅度有较高要求的应用不利于SEO适用于对SEO有较高要求的应用
内容更新相关组件的切换,仅局部更新整体HTML的切换
相关成本前期开发成本较高,后期维护较为容易前期开发成本低,后期维护比较麻烦,可能一个功能就需要改很多地方

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值