vue面试总结总结一些vue相关的知识,将笔记整理跟大家分享,有些知识会经常在前端面试的时候会问到,所以做个记录,希望对

Vue使用了基于HTML的模板语法,可以在HTML模板中使用Vue的指令,如v-for、v-if等,用于渲染视图。React则使用了JSX语法,允许在JavaScript代码中嵌入HTML,用于描述组件的结构和行为。

Angular使用了自己的模板语法,类似于HTML,但有些语法上的区别。

2.数据绑定方式不同

Vue使用了双向数据绑定,即数据的修改可以自动同步到视图中,视图中的修改也可以自动同步到数据中。React则使用了单向数据流,即组件通过props接收数据,通过state来管理自己的状态。Angular则使用了双向数据绑定和单向数据绑定两种方式,具体取决于开发者的选择。

3.组件化方式不同

Vue和React都是基于组件的方式来构建应用程序的。Vue的组件化方式比较简单,每个组件包含模板、状态和方法。React的组件化方式则更加灵活,每个组件只包含render方法,可以通过props和state来管理组件的数据和状态。Angular也是基于组件的方式,但它使用了更加复杂的依赖注入机制来管理组件的依赖和状态。

4.状态管理方式不同

Vue使用了Vuex来管理应用程序的状态,包括状态的存储、修改和同步等。React则使用了Redux或MobX来管理应用程序的状态。Angular自带了自己的状态管理机制,包括服务、RxJS等。

它的生命周期中有多个事件钩子,让我们在控制整个Vue实例的过程时更容易形成好的逻辑。

它可以总共分为8个阶段:创建前/后,载入前/后,更新前/后,销毁前/销毁后

beforeCreate,created,beforeMount,mounted

一般created/beforeMount/mounted皆可.比如如果你要操作DOM,那肯定mounted时候才能操作.

vue是实现了双向数据绑定的mvvm框架,当视图改变更新模型层,当模型层改变更新视图层。在vue中,使用了双向绑定技术,就是View的变化能实时让Model发生变化,而Model的变化也能实时更新到View。

vue双向数据绑定是通过数据劫持结合发布订阅模式的方式来实现的,也就是说数据和视图同步,数据发生变化,视图跟着变化,视图变化,数据也随之发生改变;核心:关于VUE双向数据绑定,其核心是Object.defineProperty()方法。

原理:vue.js则是采用数据劫持结合发布者-订阅者模式的式,Object.defineProperty()来劫持各个属性的setter,消息给订阅者,触发相应的监听回调

vue.set()

因为JavaScript的特性所导致,在component中,data必须以函数的形式存在,不可以是对象。组建中的data写成一个函数,数据以函数返回值的形式定义,这样每次复用组件的时候,都会返回一份新的data,相当于每个组件实例都有自己私有的数据空间,它们只负责各自维护的数据,不会造成混乱。而单纯的写成对象形式,就是所有的组件实例共用了一个data,这样改一个全都改了。

computed:当一个属性受多个属性影响的时候就需要用到computed最典型的栗子:购物车商品结算的时候watch:当一条数据影响多条数据的时候就需要用watch(当一个属性发生变化时,需要执行对应的操作,一对多)栗子:搜索数据

created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。

hash模式:即地址栏URL中的#符号;

history模式:window.history对象打印出来可以看到里边提供的方法和记录长度。利用了HTML5HistoryInterface中新增的pushState()和replaceState()方法。(需要特定浏览器支持)。history模式的URL中没有#,它使用的是传统的路由分发模式,即用户在输入一个URL时,服务器会接收这个请求,并解析这个URL,然后做出相应的逻辑处理。

Hash模式在hash模式下,URL中的hash值作为路由路径。该模式可以兼容较老的浏览器,并且无需后端服务器的支持。在使用hash模式时,我们可以实现单页应用的效果,从而提高页面的性能。但是,该模式的缺点是URL中会带有#号,可能不太友好,对于一些URL形式有要求的场景,不适用。在使用hash模式时,需要注意一些需要刷新页面的操作,例如在页面中使用锚点进行定位时,需要使用JavaScript来实现。

History模式在history模式下,URL中的路径作为路由路径,不会带有#号。该模式的优点是URL美观,更符合一些场景的要求。此外,由于使用了HTML5中新增的HistoryAPI,可以实现前进和后退操作,提高用户体验。但是,该模式需要后端服务器的支持,而且需要正确地配置URL路径映射,否则会导致页面刷新时出现404错误。

Abstract模式在abstract模式下,路由器不会监听URL变化,而是通过调用路由器API进行导航。该模式的优点是可以在不需要浏览器API的情况下使用路由,比如在Node.js等非浏览器环境下。但是,由于需要手动管理路由的变化,使用起来比较麻烦,并且不适用于大多数场景。

模式之间的区别三种路由模式的区别主要在于URL的形式和后端服务器的支持情况。对于需要兼容较老浏览器的场景,可以选择hash模式;对于需要美观URL的场景,可以选择history模式;如果需要在非浏览器环境下使用路由,可以选择abstract模式。

在使用VueRouter时,我们需要根据项目的实际需求来选择路由模式。如果需要兼容较老的浏览器,或者是单页应用场景,可以选择hash模式;如果需要美观URL,或者需要使用浏览器的前进和后退功能,可以选择history模式;如果需要在非浏览器环境下使用路由,可以选择abstract模式。

用法:query要用path来引入,params要用name来引入,接收参数都是类似的,分别是this.$route.query.name和this.$route.params.name。url地址显示:query更加类似于我们ajax中get传参,params则类似于post,说的再简单一点,前者在浏览器地址栏中显示参数,后者则不显示注意点:query刷新不会丢失query里面的数据、params刷新会丢失params里面的数据。

//query语法:this.$router.push({path:"地址",query:{id:"123"}});//这是传递参数this.$route.query.id;//这是接受参数//params语法:this.$router.push({name:"地址",params:{id:"123"}});//这是传递参数this.$route.params.id;//这是接受参数17、组件之间传值?18、$nextTick的使用当你修改了data的值然后马上获取这个dom元素的值,是不能获取到更新后的值,你需要使用$nextTick这个回调,让修改后的data值渲染更新到dom元素之后在获取,才能成功。

需要使用key来给每个节点做一个唯一标识,Diff算法就可以正确的识别此节点。作用主要是为了高效的更新虚拟DOM。

共同点:都能控制元素的显示和隐藏;不同点:实现本质方法不同,v-show本质就是通过控制css中的display设置为none,控制隐藏,只会编译一次;v-if是动态的向DOM树内添加或者删除DOM元素,若初始值为false,就不会编译了。而且v-if不停的销毁和创建比较消耗性能。总结:如果要频繁切换某节点,使用v-show(切换开销比较小,初始开销较大)。如果不需要频繁切换某节点使用v-if(初始渲染开销较小,切换开销比较大)。

在组件中的style前面加上scoped

ref="domName"用法:this.$refs.domName

v-model双向数据绑定;v-for循环;v-ifv-show显示与隐藏;v-on事件;v-once:只绑定一次。

v-model用于表单数据的双向绑定,其实它就是一个语法糖,这个背后就做了两个操作:v-bind绑定一个value属性;v-on指令给当前元素绑定input事件。

相同点:assets和static两个都是存放静态资源文件。项目中所需要的资源文件图片,字体图标,样式文件等都可以放在这两个文件下,这是相同点不同点:assets中存放的静态资源文件在项目打包时,也就是运行npmrunbuild时会将assets中放置的静态资源文件进行打包上传,所谓打包简单点可以理解为压缩体积,代码格式化。而压缩后的静态资源文件最终也都会放置在static文件中跟着index.html一同上传至服务器。static中放置的静态资源文件就不会要走打包压缩格式化等流程,而是直接进入打包好的目录,直接上传至服务器。因为避免了压缩直接进行上传,在打包时会提高一定的效率,但是static中的资源文件由于没有进行压缩等操作,所以文件的体积也就相对于assets中打包后的文件提交较大点。在服务器中就会占据更大的空间。建议:将项目中template需要的样式文件js文件等都可以放置在assets中,走打包这一流程。减少体积。而项目中引入的第三方的资源文件如iconfoont.css等文件可以放置在static中,因为这些引入的第三方文件已经经过处理,我们不再需要处理,直接上传。

数据驱动、组件系统数据驱动:ViewModel,保证数据和视图的一致性。组件系统:应用类UI可以看作全部是由组件树构成的。

jQuery是使用选择器($)选取DOM对象,对其进行赋值、取值、事件绑定等操作,其实和原生的HTML的区别只在于可以更方便的选取和操作DOM对象,而数据和界面是在一起的。比如需要获取label标签的内容:$("lable").val();,它还是依赖DOM元素的值。Vue则是通过Vue对象将数据和View完全分离开来了。对数据进行操作不再需要引用相应的DOM对象,可以说数据和View是分离的,他们通过Vue对象这个vm实现相互的绑定。这就是传说中的MVVM。

delete只是被删除的元素变成了empty/undefined其他的元素的键值还是不变。Vue.delete直接删除了数组改变了数组的键值。

push();pop();shift();unshift();splice();sort();reverse()

.stop:等同于JavaScript中的event.stopPropagation(),防止事件冒泡;.prevent:等同于JavaScript中的event.preventDefault(),防止执行预设的行为(如果事件可取消,则取消该事件,而不停止事件的进一步传播);.capture:与事件冒泡的方向相反,事件捕获由外到内;.self:只会触发自己范围内的事件,不包含子元素;.once:只会触发一次。

VueX是适用于在Vue项目开发时使用的状态管理工具。试想一下,如果在一个项目开发中频繁的使用组件传参的方式来同步data中的值,一旦项目变得很庞大,管理和维护这些值将是相当棘手的工作。为此,Vue为这些被多个组件频繁使用的值提供了一个统一管理的工具——VueX。在具有VueX的Vue项目中,我们只需要把这些值定义在VueX中,即可在整个Vue项目的组件中使用。

实现多组件状态管理。多个组件之间需要数据共享时,Vuex是个很好的帮手哦

其中state和mutation是必须的,其他可根据需求来加1、state:负责状态管理,类似于vue中的data,用于初始化数据//状态管理2、mutation:专用于修改state中的数据,通过commit触发//修改state3、action:可以处理异步,通过dispatch触发,不能直接修改state,首先在组件中通过dispatch触发action,然后在action函数内部commit触发mutation,通过mutation修改state状态值//异步操作4、getter:Vuex中的计算属性,相当于vue中的computed,依赖于state状态值,状态值一旦改变,getter会重新计算,也就是说,当一个数据依赖于另一个数据发生变化时,就要使用getter5、module:模块化管理//模块

//导入vue及vueximportVuefrom'vue'importVuexfrom'vuex'//挂载vuexVue.use(Vuex)//创建vuex对象并向外暴露exportdefaultnewVuex.Store({//全局属性变量state:{},//全局同步方法,调用方法,this.$store.commit("xxx")mutations:{},//异步方法调用方法,this.$store.dispatch("xxx")actions:{},//Vuex属性计算,在视图里面当变量使用getters:{},//模块化注册modules:{}})action与mutation的区别?

conststore=newVuex.Store({state:{count:0},mutations:{increment(state){state.count++}},actions:{increment(context){context.commit('increment')}}})1、流程顺序

“相应视图—>修改State”拆分成两部分,视图触发Action,Action再触发Mutation。

2、角色定位

基于流程顺序,二者扮演不同的角色。

Mutation:专注于修改State,理论上是修改State的唯一途径。

Action:业务代码、异步请求。

3、限制

角色不同,二者有不同的限制。

Mutation:必须同步执行。

Action:可以异步,但不能直接操作State。

子组件用标签来确定渲染的位置标签里面可以放DOM结构,当父组件使用的时候没有往插槽传入内容,标签内DOM结构就会显示在页面父组件在使用的时候,直接在子组件的标签内写入内容即可

THE END
1.DOM节点类型文档对象模型(DOM)是 HTML 和XML 文档的编程接口。它为文档提供了一种结构化的表示方法,允许开发者通过脚本来访问文档的结构、样式和内容。在 DOM 中,每个元素、属性、文本块等都被视为一个节点,这些节点构成了 DOM 树。本文将详细介绍 DOM 中的不同节点类型。 https://blog.csdn.net/wjs2024/article/details/143871001
2.dom分为哪三个部分WebKit JavaScript Binding添加新DOM对象的三种方式 一.基础知识 首先WebKit IDL并非完全遵循Web IDL,只是借鉴使用.WebKit官网提供了一份说明(WebKitIDL),比如Web IDL称"operation”(操作), 而WebKitIDL称为"method"(方法), 另外Web IDL也不像WebKitIDL那样将属性和参数分开. 为JavaScript绑定对象,可以使用module来定义https://www.shuzhiduo.com/topic/dom%E5%88%86%E4%B8%BA%E5%93%AA%E4%B8%89%E4%B8%AA%E9%83%A8%E5%88%86/
3.javascript学习笔记(一)DOM基本操作基础知识js教程document.body.appendChild(text); Java免费学习笔记:立即学习 解锁Java 大师之旅:从入门到精通的终极指南java速学教程(入门到精通) java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦! 下载 https://m.php.cn/faq/20226.html
4.DOM的基础知识DOM的基础知识 什么是DOM DOM:Document Object Model 文档对象模型是W3C组织推荐的处理可扩展标记语言的标准编程接口 B:浏览器O:对象M:模型,W3C定义了一系列的DOM接口,通过这些DOM接口可以改变网页的内容,结构和样式 DOM的简介 DOM树: 如何获取页面元素 document文档对象提供了一系列的api方法,可以方便我们操作dom数https://www.pianshen.com/article/15402497208/
5.Go语言学习&求职路径(附Go语言书单)第1篇“Go语言入门”,介绍Go语言的基础语法,既使没有Go语言基础的读者也可以学习本书。 第2篇“Go Web基础入门”,包括3章:Go Web开发基础、接收和处理Go Web请求、用Go访问数据库。本篇能使读者快速掌握用Go语言进行Web开发的基础知识。 第3篇“Go Web高级应用”,包括4章:Go高级网络编程、Go文件处理、Go并发http://www.broadview.com.cn/article/420281
6.Vue快速入门学习笔记(更新ing)本笔记综合了视频狂神说的Vue快速上手和菜鸟教程、CSDN等博客文章,以及个人的一些学习见解与体会。 由于是为了团队需要而快速入门,HTML、CSS、JS、Vue等基础均不全,故本笔记仅供参考学习使用。Vue 的核心库只关注视图层,方便与第三方库或既有项目整合。https://m.nowcoder.com/discuss/353148469172969472
7.ElementUI入门笔记(个人向)Element UI入门笔记 将页面分割为一级菜单、二级菜单、导航栏三个部分; 使用npm下载安装,使用语句npm i element-ui -s; 布局组件 --:key用于为每一个下拉选项设置唯一的Key值,用于Vue的虚拟DOM的diff算法--><!--:label设置选项要显示的文本信息--><!--:value设置选项选中后给http://www.mzph.cn/web/52984.shtml
8.E023Web学习笔记JQuery(一):基础知识51CTO博客E023Web学习笔记-JQuery(一):基础知识 一、JQuery基础 1、概念 jQuery 是一个 JavaScript 库; jQuery 极大地简化了 JavaScript 编程; jQuery 很容易学习; 2、快速入门 使用步骤: 第一步:下载JQuery; https://jquery.com/download/ 1. 第二步:导入JQuery的JS文件(直接复制);https://blog.51cto.com/u_13272819/6079059
9.Vue笔记——node.js入门知识这个时候我们的node.js便出现了。我们一旦安装好node.js之后,如何下载和安装的问题就迎刃而解,这个时候我们只需要使用npm install相关命令,node.js就可以帮助我们自动安装脚手架。如果你对npm不了解的话,推荐一篇博客:Vue笔记——npm入门知识。 安装好脚手架之后,我们在项目中还有会使用到各种各样的插件和库,比如vuehttps://www.jianshu.com/p/141c891561ec
10.Vue2.0学习笔记(基础篇)Vue2.0学习笔记(基础篇) 标签: JavaScript Vue.js 收藏 前言 纠结了很久到底是学Vue还是React,然后发现有纠结那么久的时间,说不定一个已经入门了。于是先挑一个基于原生js的框架Vue开始吧(还有个主要原因是Vue的中文官网做的比较小清新,看起来舒服). 稍微学习了一下,感觉vue和angular1.0真的有很多相像的地方。https://www.imooc.com/article/16117
11.JavaScript高级程序设计(第3版)(豆瓣)本来主攻PHP的我,在工作过程中发现JS的知识也是很必须的,所以决定开始学JS,然后在2012.6.7号在亚马逊买了这本书,以为可以用于入门,没想到这么书还是有一定难度,看了大半个月,才有一些零零碎碎的感觉本来自己基础不牢,也没什么好说的,所以说这本书还真的不适合初 (展开) 4 1 9回应 > 更多书评 https://book.douban.com/subject/10546125/
12.超过1000本的计算机经典书籍个人笔记资料以及本人在《Python入门教材(中文)》 百度云链接 提取码:d90e 《Python数据处理》 百度云链接 提取码:yqvb 《Python网络编程基础》 百度云链接 提取码:neke 《Python学习手册(第4版)》 百度云链接 提取码:gsio 《Python正则表达式-深入浅出》 百度云链接 提取码:sw5p 《Python知识手册-V2.0.1》 百度云链接 提取码:98a6 https://github.com/dptr/CS-Books/