您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

前台面试问题-VUE高频问题 [php源码]

  • 时间:2022-10-14 13:11 编辑: 来源: 阅读:353
  • 扫一扫,手机访问
摘要:前台面试问题-VUE高频问题 [php源码]
1.vue的生命周期Vue的生命周期主要分为几个简单的步骤:数据初始化、dom挂载、数据升级、组件卸载。打开组件缓存时,会有组件启用和组件禁用两个阶段,每个阶段除了cache beforeCreate的两个数据初始化阶段外,都会去前后两个钩子:实例初始化后,配置前调用数据观察器和事件/观察器事件。 Created:实例在创建后被调用。 在这一步中,实例已经完成了以下配置:数据观察器、属性和方法的操作以及watch/event事件的回调。 但是,挂载阶段还没有开始,$el属性目前是不可见的。 Dom mount stage beforeMount:挂载开始前调用:第一次调用相关的render函数。 挂载:El被新创建的vm替换。$el,钩子在装入实例后被调用。 如果根实例在文档中安装了一个元素。调用mounted时,$el也在文档中。 Mounted并不保证所有子组件都会一起安装。 如果你想等到整个视图被渲染,你可以使用vm。$nextTick替换挂载的数据和新的stage beforeUpdate:当数据升级时调用,这发生在虚拟DOM重新呈现和修补之前。 更新:由于数据变化,虚拟DOM被重新渲染和打补丁,之后钩子将被调用。 当这个钩子被调用时,组件DOM已经被升级,所以现在可以执行依赖于DOM的操作了。 但是,在大多数情况下,您应该避免在此期间更改状态。 如果状态相应地改变,通常最好使用计算属性或观察器。 Updated不保证所有子组件将一起重绘。 如果你想等到整个视图被重画,你可以用vm替换更新的。$nextTick:启用缓存时,会有以下两个钩子被激活:激活时调用:keep-alive组件被激活。 停用:当保持活动组件被停用时保持活动。 卸载组件时:beforeDestroy:在销毁实例之前调用。 在这一步,实例仍然完全可用。 销毁:在销毁Vue实例后调用。 调用后,Vue实例指示的所有内容都将被解除绑定,所有事件侦听器都将被移除,所有子实例都将被销毁。 Vue.png2.Vue实现了数据双向绑定的原理。vue主要采用数据劫持结合发布者-订阅者模式的方法,通过Object.defineProperty()劫持每个属性的setter和getter,当数据发生变化时向订阅者释放一条消息,触发相应的监控回调。 具体来说,Obeject.defineProperty()中的setter和getter用于监视属性更改,以便观察者可以监视数据,然后通知订阅者。然后,订户实际上是一个简单的数组,这个数组的内容是我们公司使用的数据集合。使用的数据可以通过getter获得。其实就是在调用的时候给数组添加一个订阅者,从而实现一个Watcher(被监控数据的集合),然后实现一个Compile,其功能是解析模板指令,用数据替换模板中的变量,然后初始化渲染页面视图,将每个指令对应的节点绑定到升级函数,增加订阅者来监控数据。一旦数据发生变化,您将收到通知并升级视图。vue的双向数据绑定,其实就是以MVVM作为数据绑定的入口,整合观察者、编译、观察器,通过观察者监控自身模型数据的变化,通过编译解析编译模板的指令,最后利用观察器搭建观察者和编译之间的沟通桥梁,实现数据的变化-->视图升级;查看交互变更(输入)->:模型数据变更的双向绑定效果 3.vue路由的实现原理在VUE,前台路由有两种实现方式:哈希和历史接口。单页路由的特点是采用前台路由系统,通过改变URL来升级页面视图,无需重新请求页面。 目前在浏览器环境下实现该功能主要有两种方式:hash和历史界面。这两种模式的实现都是先说hash,浏览器url中的hash(“#”)符号原本的作用就是要加到URL中表示网页的位置。#符号本身及其后面的字符称为hash,可以通过window.location.hash属性读取。 它有几个特点:hash虽然出现在URL中,但不会包含在HTTP请求中。 它是用来指导浏览器的动作的,对服务器完全没用。因此,更改hash不会重新加载页面,它可以为hash的更改添加一个hashchange监视事件。一个是每次修改hash(window.location.hash)都会在浏览器的访问历史中增加一条记录。也就是说我可以通过这些特性实现一个hash模式下的单页路由,通过修改location.hash实现push方法(页面跳转),通过修改location.href实现replace()方法,通过hashchange事件的监控实现页面跳转后的数据升级,历史模式完全采用h5的新特性。从HTML5开始,history接口提供了两个新方法:pushState(),replaceState(),它允许我们修改浏览器历史堆栈,popState事件可以监视状态的变化。但是历史模式有一个问题,就是对于单页面应用来说,理想的场景是在进入应用的时候才加载index.html,后续的网络操作会通过Ajax完成,不会根据URL重新请求页面。但如果客户直接进入并进入地址栏,当浏览器重启并重新加载时,历史模式会将URL修改为与正常请求后台的URL相同。在这种情况下,请求将再次发送回后台,如果后台没有配置相应的路由解决方案,将返回404错误。 通常,我们在后台配置这个问题,将所有路由请求指向index.html文件4。Vue 1形成的通信。从父组件到子组件的props单个数据流使用refs访问子组件,$parent访问子组件,$children访问子组件,$root访问当前组件树的根Vue实例,scope访问template元素的子组件中的slot元素。的属性值应该是13k2。子组件向父组件传输数据:子组件通过事件向父组件传输数据,子组件通过$emit(eventName)触发事件,父组件通过$on监听事件。3.兄弟姐妹间的交流①通过事件发布订阅varbus = new vue();公交车。$emit("id-selected ",1);公交车。$ on ("id-selected ",function (id) {}) ②用vuex实现5。Vuex是做什么的?Vuex是一个适用于Vue.js应用的状态管理库,为应用中的所有组件提供集中的状态存储和操作,确保所有状态都可以以可预测的方式修改;State: state定义了应用程序状态的数据结构,默认的初始状态也可以在这里设置。 动作:动作是提交触发变更的信息的定义。常见的例子包括从服务器获取数据,并在获取数据后调用Store.commit()来更改存储中的状态。 您可以在组件中使用dispatch来发出操作。 突变:调用突变是唯一允许升级应用程序状态的地方。 Getters: Getters允许组件从存储中获取数据。例如,我们可以从存储中的项目列表中选择已完成的项目列表。modules: modules对象允许将单个存储拆分为多个存储,并存储在单个状态树中。 随着应用复杂度的增加,这种拆分可以更好的组织代码,但是vuex也有缺点,vuex中存储的数据与网页的生命周期是同步的,当页面刷新时,vuex中的所有数据都会消失并重置为初始状态,因此不适合与引用页面进行数据交互(在这个项目中,vuex只适合数据的集中管理,不适合数据存储,在这种情况下,通常会少量使用路由参数)。后端管理系统多少合适?6.6的路线怎么样。Vue传送?& ltrouter-link :to="{path:'details ',query:{ id:El . tog _ line _ id } } " & gt;& ltrouter-link :to="{name:'details ',params:{ id:El . tog _ line _ id } } " & gt;然后,通过组件内部的$route.params读取数据,但如果route传递的参数值是对象,则不起作用,并报错。一般在传输之前,要传输的数据会经过base64转换,不会造成路由错误。7.7之间的区别。Vue和angular?1.Vue.js无论是API还是设计都比Angular简单很多,你可以快速掌握它的统一特性,并投入开发。 2.Vue.js是一个更加灵活和开放的解决方案。 它允许你以你想要的方式组织应用程序,而不是一直遵循Angular设置的规则。 它只是一个视图层,因此您可以将它嵌入到现有页面中,而不是使它成为一个巨大的单页面应用程序。 它给了你更多的空间与其他库合作,但相应地,你也需要做出更多的架构决策。 比如Vue.js core默认不包含路由和Ajax函数,通常假设你在应用中使用一个模块构建一个系统。 这可能是最重要的区别。 3.Angular使用双向绑定,Vue也支持双向绑定,但是默认是单向绑定,数据从父组件单向传输到子组件。 在大型应用程序中使用单向绑定使得数据流易于理解。 4.在Vue.js中,指令和组件的划分更加清晰。 指令只封装DOM操作,而组件代表一个自给自足的独立单元,有自己的视图和数据逻辑。 在Angular中,有很多地方是两者混合的。 5.Vue.js具有更好的性能,并且非常非常容易优化,因为它不使用脏检查 有角,当看的人越来越多的时候,就会越来越慢。由于范围的每次变化,所有的观察者都必须重新计算。 此外,如果少量观察器触发另一次升级,则摘要周期可能必须运行多次。 棱角分明的客户往往用高深的技术来处理脏支票周期的问题。 有时没有简单的方法来优化具有大量观察器的范围。 Vue.js完全没有这个问题。因为它使用基于依赖关系跟踪的观察系统,并异步升级,所以所有数据更改都是独立触发的,除非它们之间有明确的依赖关系。 唯一需要做的优化是在v-for上使用track-by 8.keep-alive指令keep-alive指令用于缓存组件,即在不破坏组件的情况下缓存组件。下次打开该组件时,它将直接显示。如果将切换的组件保留在内存中,可以保留其状态或避免重新渲染。 一般用于上拉加载的页面。因为如果一个页面有上拉加载,客户加载几个页面然后点击进入介绍,返回的时候还得重新加载。这种体验很不好。通过keep-alive,可以将这个列表页保存在内存中,避免客户重复操作,提升客户体验。9.关于vuejs页面闪烁{{message}}在Vue.js指令中有v-cover。 当与CSS规则如[v-coat]{ display:none }一起使用时,该指令可以隐藏未编译的Mustache标记,直到实例准备就绪。 用法如下:[v斗篷]{ display:none;} & ltdiv v-斗篷& gt{ { message } } & lt/div & gt;这样< div >直到编译结束才会显示。10 .观察、计算、方法之间的区别?手表是做单数据监测的。方法名必须与要监控的数据同名,并且不需要返回值。您可以获得数据修改前后的修改值。computed和methods基本相同,都是方法。都是在数据发生变化时自动执行,只是定位不同。computed是计算属性,而methods是put操作方法。还有不同的调用形式,其中计算属性调用不需要括号,方法需要()合二为一,即computed会缓存计算出的值。如果方法内部所依赖的值没有变化,那么无论调用多少次,computed都只执行一次,其余的调用都将返回缓存的值,而方法的执行次数与调用次数相同。


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)
【技术支持|常见问题】你正确使用https了吗? [php源码](2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部