Vue 面试中常问知识点整理
生命周期:Vue实例从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期,各个阶段有相对应的事件钩子。 beforeCreate(创建前),在数据观测和初始化事件还未开始created(创建后),完成数据观测,属性和方法的运算,初始化事件, $el 属性还没有显示出来beforeMount(载入前),在挂载开始之前被调用,相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。注意此时还没有挂载html到页面上。mounted(载入后),在 el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换 el 属性指向的DOM对象。完成模板中的html渲染到html页面中。此过程中进行ajax交互。beforeUpdate(更新前),在数据更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。可以在该钩子中进一步地更改状态,不会触发附加的重渲染过程。updated(更新后),在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。beforeDestroy(销毁前),在实例销毁之前调用。实例仍然完全可用。destroyed(销毁后),在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。注意:created 阶段的ajax请求与 mounted 请求的区别:前者页面视图未出现,如果请求信息过多,页面会长时间处于白屏状态。mounted 不会承诺所有的子组件也都一起被挂载。如果你希望等到整个视图都渲染完毕,可以用vm.$nextTick 。初始化组件时,仅执行了 beforeCreate/Created/beforeMount/mounted 四个钩子函数当改变 data 中定义的变量(响应式变量)时,会执行 beforeUpdate/updated 钩子函数当切换组件(当前组件未缓存)时,会执行 beforeDestory/destroyed 钩子函数初始化和销毁时的生命钩子函数均只会执行一次, beforeUpdate/updated 可多次执行仅当子组件完成挂载后,父组件才会挂载当子组件完成挂载后,父组件会主动执行一次beforeUpdate/updated钩子函数(仅首次)父子组件在data变化中是分别监控的,但是在更新props中的数据是关联的销毁父组件时,先将子组件销毁后才会销毁父组件组件的初始化(mounted之前)分开进行,挂载是从上到下依次进行当没有数据关联时,兄弟组件之间的更新和销毁是互不关联的mixin中的生命周期与引入该组件的生命周期是仅仅关联的,且mixin的生命周期优先执行1、什么是vue生命周期?答: Vue 实例从创建到销毁的过程,就是生命周期。从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、销毁等一系列过程,称之为 Vue 的生命周期。2、vue生命周期的作用是什么?答:它的生命周期中有多个事件钩子,让我们在控制整个Vue实例的过程时更容易形成好的逻辑。3、vue生命周期总共有几个阶段?答:它可以总共分为8个阶段:创建前/后、载入前/后、更新前/后、销毁前/销毁后。5、DOM 渲染在哪个周期中就已经完成?答:DOM 渲染在 mounted 中就已经完成了。vue实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫持各个属性的 setter,getter ,在数据变动时发布消息给订阅者,触发相应监听回调。当把一个普通 Javascript 对象传给 Vue 实例来作为它的 data 选项时,Vue 将遍历它的属性,用Object.defineProperty() 将它们转为 getter/setter 。用户看不到 getter/setter,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。vue的数据双向绑定 将MVVM作为数据绑定的入口,整合 Observer ,Compile和 Watcher 三者,通过 Observer 来监听自己的 model 的数据变化,通过 Compile 来解析编译模板指令(vue中是用来解析 {{}}),最终利用 watcher 搭起observer和 Compile 之间的通信桥梁,达到数据变化 —>视图更新;视图交互变化( input )—>数据 model 变更双向绑定效果。js实现简单的双向绑定:1、父组件与子组件传值父组件传给子组件:子组件通过 props 方法接受数据;子组件传给父组件: $emit 方法传递参数2、非父子组件间的数据传递,兄弟组件传值 eventBus ,就是创建一个事件中心,相当于中转站,可以用它来传递事件和接收事件。项目比较小时,用这个比较合适。hash模式:在浏览器中符号“#”,#以及#后面的字符称之为hash,用 window.location.hash 读取。特点:hash虽然在URL中,但不被包括在HTTP请求中;用来指导浏览器动作,对服务端安全无用,hash不会重加载页面。history模式:history采用HTML5的新特性;且提供了两个新方法: pushState(), replaceState()可以对浏览器历史记录栈进行修改,以及popState事件的监听到状态变更。需求一:在一个列表页中,第一次进入的时候,请求获取数据。点击某个列表项,跳到详情页,再从详情页后退回到列表页时,不刷新。也就是说从其他页面进到列表页,需要刷新获取数据,从详情页返回到列表页时不要刷新。解决方案在 App.vue设置:假设列表页为 list.vue ,详情页为 detail.vue ,这两个都是子组件。我们在 keep-alive 添加列表页的名字,缓存列表页。然后在列表页的 created 函数里添加ajax请求,这样只有第一次进入到列表页的时候才会请求数据,当从列表页跳到详情页,再从详情页回来的时候,列表页就不会刷新。这样就可以解决问题了。需求二:在需求一的基础上,再加一个要求:可以在详情页中删除对应的列表项,这时返回到列表页时需要刷新重新获取数据。我们可以在路由配置文件上对 detail.vue 增加一个 meta 属性。这个 meta 属性,可以在详情页中通过 this.$route.meta.isRefresh 来读取和设置。设置完这个属性,还要在 App.vue 文件里设置 watch 一下 $route 属性。这样就不需要在列表页的 created 函数里用 ajax 来请求数据了,统一放在 App.vue 里来处理。触发请求数据有两个条件:从其他页面(除了详情页)进来列表时,需要请求数据。从详情页返回到列表页时,如果详情页 meta 属性中的 isRefresh 为 true ,也需求重新请求数据。当我们在详情页中删除了对应的列表项时,就可以将详情页 meta 属性中的 isRefresh 设为 true 。这时再返回到列表页,页面会重新刷新。1、css只在当前组件起作用答:在 style 标签中写入 scoped 即可 例如:2、v-if 和 v-show 区别答: v-if 按照条件是否渲染, v-show 是 display 的 block 或 none ;3、 $route 和 $router 的区别 答: $route 是“路由信息对象”,包括 path,params,hash,query,fullPath,matched,name 等路由信息参数。而 $router 是“路由实例”对象包括了路由的跳转方法,钩子函数等。

MD5和HASH区别?
Hash,一般翻译做“散列”,也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。 关键特性:单向性 抗冲突性 映射分布均匀性和差分分布均匀性 而MD5可以说是目前应用最广泛的Hash算法
相同处: 1.二者均是多对一的数据加密模式。(也就是说将一定量的数据加密成一个固定长度的数据)2.二者的加密方式均为单向加密,也就是加密不可逆。3.二者多用于数据加密和文件以及数据的完整性验证不同处:1.MD5目前存在很大的安全隐患,通过一些方法可以将MD5暴力破解,同样对于SHA1的算法现在同样存在这样的问题。 2.SHA2算法由于相对于SHA1来说,加密数据位数的上升大大增加了破解的难度,使得安全性能要远远高于MD5

hash和history的原理和区别
原理区别 hash原理:hash通过监听浏览器的onhashchange()事件变化,查找对应的路由规则history原理: 利用H5的 history中新增的两个API pushState() 和 replaceState() 和一个事件onpopstate监听URL变化history模式利用了HTML5 History Interface中新增的pushState()和replaceState()方法,这两个方法应用于浏览器的历史记录栈,在当前已有的back、forward、go的基础上,他们提供了对当前浏览器进行修改的功能,只是当它们被修改时,虽然浏览器的URL发生了变化,但是不会立即向后端服务器发送请求,但是如果点击刷新,就会重新向后端服务器发送请求。hash 就是指 url 尾巴后的 # 号以及后面的字符,history没有底带#,外观上比hash 模好看些hash回车刷新会加载到地址栏对应的页面,history一般就是404掉了hash 能兼容到IE8, history 只能兼容到 IE10; hash 值变化不会导致浏览器向服务器发出请求,而且 hash 改变会触发 hashchange 事件(hashchange只能改变 # 后面的url片段);虽然hash路径出现在URL中,但是不会出现在HTTP请求中,对后端完全没有影响,因此改变hash值不会重新加载页面,基本都是使用 hash 来实现前端路由的。
Hashihnstory的原理和区别,我认为这应该非常不错,而且这个应该可以达到更好的一个园内使用性能,所以我认为这应该可以达到更好的使用程度,还是非常好的。
H和history的原理和区别。他们的原理和区别都有,并且不是叙述几分钟几秒钟就可以完成的,你在网上下载一下子。
原理和区别就是他们的大两个单词是不一样的,所以话就是他们家的原理和以及它的区别点。
Hash和history的原理和区别在于两者的原理,基本上没有什么区别,而最大的区别之处在于于他们所网络的群体不同

使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载,就是hash路由模式吗?
是的,这种工作方式最大的好处不会改变URL,同时也能产生历史记录,方便追溯历史。 hash 模式,利用是网页锚点完成,该模式工作是需要依托于网页中的内容被加载。在静态页面中使用,由于静态页面已经被缓存,可以减少服务器压力,同时又能起到很好的页面导航效果。优点:适用于静态页面,快速输出文本内容,具有页面位置导航效果 缺点:不宜页面文件过大,否则需要搭配 ajax 方法来获取网页内容,以减少服务器压力

vue路由中的mode是什么意思
这个是vue-router的模式,默认是hash模式,这样模式所对应的url地址可能是这样的www.xxxx.com/#/userinfo。当然也可以修改这个值,设置为history模式,这种模式充分利用 history.pushState API 来完成 URL 跳转而无须重新加载页面。如果设置为history模式后,上面的url就会变成www.xxxx.com/userinfo。地址就会看的更加优雅,当然这种模式需要配合服务器设置来完成,不同的服务器配置略有不同,具体可以参考官方文档HTML5 History 模式

本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/70586.html。