vue2 面试题带答案,万字总结
1. 什么是 vue
Vue 是一套用于构建用户界面的渐进式框架。Vue.js 的主要特点:渐进式框架、声明式渲染、组件化、响应式数据绑定等;
2、MVC 和 MVVM 区别
-
MVC 是模型(model)-视图(view)-控制器(controller),控制器负责视图和模型的交互。
-
MVVM,是模型(model)-视图(view)-viewModel,viewModel 双向绑定。
-
MVVM 与 MVC 区别:MVVM 实现了 View 和 Model 的同步。MVC 需要通过控制器中间控制。
3. Vue 的响应式原理?
Vue 的响应式系统利用了 Object.defineProperty() 方法来把对象的属性转成 getter 和 setter。通过这些 getter/setter,Vue 可以追踪数据的变化,并在数据变化时更新视图。
4. Vue 2 的生命周期
new Vue()
构造函数生成 vue 实例;beforeCreate
:事件和生命周期钩子初始化;created
:实例已经创建完成,data 初始化(props => methods =>data => computed => watch);数据请求在这里,速度快,loading 少。beforeMount
:编译模板到 render 函数,生成虚拟 dom;mounted
:渲染真实 DOM;beforeUpdate
:数据有更新,且新生成的虚拟 DOM 没有挂载(渲染)到页面上;updated
:虚拟 dom 以最小开支重新渲染 dom;activated
:对于<keep-alive>
包裹的组件,当组件被激活时调用。deactivated
:对于<keep-alive>
包裹的组件,当组件被停用时调用。beforeDestroy
:在 Vue 实例销毁之前调用。清除定时器、取消网络请求、移除事件监听器等,以确保在组件销毁时不会产生内存泄漏等问题。destroyed
:vue 实例中的数据不可用了。执行一些最终的清理工作,如释放内存、销毁第三方插件。
5. 父子组件生命周期执行顺序
- 1、加载过程:父 beforeCreate -> 父 created -> 父 beforeMount -> 子 beforeCreate -> 子 created -> 子 beforeMount -> 子 mounted -> 父 mounted
- 2、更新过程:父 beforeUpdate -> 子 beforeUpdate -> 子 updated -> 父 updated
- 3、销毁过程:父 beforeDestroy -> 子 beforeDestroy -> 子 destroyed -> 父 destroyed
6. vue 组件传值
-
props 和 this.$emit(“”)
-
inheritAttrs,Son 页面 props 没有的数据会默认绑定到根元素上面
-
a t t r s , attrs, attrs,listeners 将 parent 的属性和方法向下传递
-
provide/inject 祖先组件向其所有子孙后代注入一个依赖
-
EventBus 不支持响应式:this. E v e n t B u s . EventBus. EventBus.emit(a,…),this. E v e n t B u s . EventBus. EventBus.on(a,…)
-
this. p a r e n t 父组件 , t h i s . parent父组件,this. parent父组件,this.children 子组件
-
vm. r o o t : 组件树的根实例 , 如果没有父实例 , v m . root:组件树的根实例,如果没有父实例,vm. root:组件树的根实例,如果没有父实例,vm.root 指向自己.
-
vm.$refs
-
vuex
7、为什么组件的 data 必须是个函数?
如果是对象,多个组件共用了一份 data,一变都变;函数返回对象的独立的拷贝,数据独立;
8. 什么是 Vue 的单向数据流?
数据总是从父组件传到子组件,子组件不能修改父组件传过来的数据,有利于数据维护。
9. v-model 双向绑定原理
- 当输入的值发生变化时,会触发 input 事件,修改当前 value 值,从而实现了从 view 到 model 的更新。
- 反之,当 Vue 实例中的数据属性发生变化时,v-model 也会自动更新输入元素的值,实现了从 model 到 view 的更新。
10. 什么是计算属性(computed)和侦听属性(watch)?
- 计算属性:基于已有的数据,按需计算一个新值,如果依赖的值没有变化,则不再重新计算。
- 侦听属性:用于观察数据变动,可以在数据变化时执行异步或开销较大的操作。
11. Vue 2 中 computed 属性和 methods 方法有什么区别?
- 计算属性:是基于其依赖进行缓存的,只有当依赖发生变化时才会重新计算。更适合展示用的数据转换。
- 方法:每次调用都会执行函数内的代码,不会被缓存,每次调用都会重新执行。
12. key 的作用?
key 的设置有助于 diff 算法更高效地识别哪些元素发生了变化。如果每个元素都有唯一的 key,Vue 可以快速确定哪些元素需要移动、添加或删除,从而减少不必要的 DOM 操作。
13. Vue 的 v-if 和 v-show 有什么区别?
v-if
:条件渲染,只有条件为真时,才会在 DOM 中创建或销毁元素。v-show
:不进行 DOM 的创建与销毁,而是通过 CSS 的display
属性来控制元素的可见性,所有情况都会被渲染到 DOM 中。
14. Vue 的指令(Directive)是什么?有哪些常用的指令?
v-bind
:动态绑定属性。v-model
:表单元素的双向数据绑定。v-for
:列表渲染。v-if
、v-else
、v-show
:条件渲染。v-once
:只渲染一次,数据变化也不在重新渲染
15. 修饰符
v-model 修饰符
- .lazy 将文本框的数据绑定事件改为 change
- .trim 去掉文本框内两边的空格
- .number 限制文本框输入的字符为数字
事件修饰符
- .stop 防止事件冒泡
- .prevent 取消默认事件
- .capture 捕获事件
- .self 设置事件触发源是本身
- .once 设置只能执行一次的事件
- .passive 告诉浏览器你不想阻止事件的默认行为
键盘修饰符
- .enter 回车键
- .tab Tab 键
- .delete
- .esc
- .space
- .up 键盘上键
- .down 键盘下键
- .left 键盘左键
- .right 键盘右键
鼠标修饰符
- .left
- .right
- .middle
修饰键
- .ctrl
- .alt
- .shift
- .meta
16. 如何在 Vue 组件中使用插槽(slot)?
- 默认插槽:直接在子组件模板中定义插槽,父组件可以在对应位置插入内容。
- 具名插槽:通过 slot 属性定义具名插槽,父组件使用 v-slot 绑定具名插槽。
- 作用域插槽:通过 slot-scope 属性访问子组件的数据,父组件可以基于子组件的数据动态生成内容。
17. 什么是动态组件?
动态组件就是在组件之间切换的时候,保持这些组件的状态,以避免反复重新渲染导致的性能问题。
<keep-alive><component v-bind:is="currentTabComponent"></component>
</keep-alive>
- include 和 exclude 属性, include 表示只有名称匹配的组件会被缓存,exclude 表示任何名称匹配的组件都不会被缓存 ,其中 exclude 的优先级比 include 高;
- 两个钩子函数 activated 和 deactivated ,当组件被激活时,触发钩子函数 activated,当组件被移除时,触发钩子函数 deactivated。
18. 什么是异步组件
只在需要的时候才加载一个模块。
- 异步组件和 webpack 的 code-splitting 功能一起配合使用
- 工厂函数中返回一个 Promise
- 局部注册:返回 Promise 的函数
//异步组件和 webpack 的 code-splitting 功能一起配合使用
Vue.component('async-webpack-example', function (resolve) {// 这个特殊的 `require` 语法将会告诉 webpackrequire(['./my-async-component'], resolve)
})//工厂函数中返回一个 Promise
Vue.component('async-webpack-example',// 这个动态导入会返回一个 `Promise` 对象。() => import('./my-async-component')
)//当使用局部注册的时候,你也可以直接提供一个返回 Promise 的函数:components: {'my-component': () => import('./my-async-component')}
19.组件循环引用问题
- 递归组件:确保递归调用条件(例如使用 v-if)。
- 组件之间的循环引用:1 共享的逻辑或数据提升到父组件,2 用动态导入(import())来延迟加载模块
20.Vue 如何检测数组变化
考虑性能原因数组没有用 defineProperty 对数组的每一项进行拦截,而是选择对 7 种数组(push,shift,pop,splice,unshift,sort,reverse)方法进行重写.数组的索引和长度不会监听。
21. 如何确保数组的修改是响应式的?
- Vue.set 向响应式对象中添加一个 property
- 替换整个数组
22. nextTick 你用过吗?
nextTick 是用于获取更新后的 DOM。
Vue 在更新 DOM 时是异步执行的。只要侦听到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中。如果同一个 watcher 被多次触发,只会被推入到队列中一次。
23. Vue 事件绑定?
原生事件是通过 addEventListener 绑定的, Vue 组件使用$on ,如果要在 vue 组件上使用原生事件,需要加.native
修饰符。vue 的事件是基于发布订阅模式的,实例方法:
- vm.$on( event, callback ):注册自定义事件。
- vm.$emit( eventName, […args] ):执行事件
- vm.$off( [event, callback] ):移除自定义事件监听器。
- vm.$once( event, callback ):监听一个自定义事件,但是只触发一次。一旦触发之后,监听器就会被移除。
vue-router
vue-router 是 Vue.js 官方的路由管理器。通过不同的 URL 路径来加载不同的组件,实现页面的切换效果。
24.vue-router 路由模式有几种?
- hash: 使用 url 的
#
值来作路由,hashchange
事件来监听 hash 值的变化 - history : 依赖 HTML5 History API ,主要有
history.pushState()
和history.replaceState()
方法,window.onpopstate = (event) => {}
事件。
25.路由传参
- url 传参: this.$route.query.id
- post 传参: this.$route.params.id
26.说说 vue-router 完整的导航解析流程是什么?
- 1.导航被触发;
- 2.在失活的组件里调用 beforeRouteLeave 守卫;
- 3.调用全局 beforeEach 守卫;
- 4.在复用组件里调用 beforeRouteUpdate 守卫;
- 5.调用路由配置里的 beforeEnter 守卫;
- 6.解析异步路由组件;
- 7.在被激活的组件里调用 beforeRouteEnter 守卫;
- 8.调用全局 beforeResolve 守卫;
- 9.导航被确认;
- 10.调用全局的 afterEach 钩子;
- 11.DOM 更新;
- 12.用创建好的实例调用 beforeRouteEnter 守卫中传给 next 的回调函数。
27.vue-router 如何响应路由参数的变化?
- 1、使用 watch 监听
- 2、向 router-view 组件中添加 key
<router-view :key="$route.fullPath"></router-view>
28.怎么实现动态加载路由?
vue-router 的 addRoutes 方法
29.怎么实现路由懒加载?
箭头函数的方法 component:()=>import('组件路径')
Vuex
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
30. vuex 执行流程
- 组件触发 Actions。
- Actions 执行异步操作后调用 Mutations 修改 State。
- State 变化触发组件重新渲染。
vue2 性能优化
- 使用异步组件,减少初始加载的体积
- 使用路由懒加载,减少初始加载的体积
- 尽量使用计算属性而不是常规方法
- 正确使用 v-if 和 v-show
- 使用 key 优化列表渲染
- 声明式事件处理,减少不必要的渲染
- 使用 v-once
- 选择合适的生命周期钩子处理数据
- 尽量减少 watch 使用,使用计算属性来替代
- 使用 Object.freeze()冻结对象
- 使用 keep-alive 缓存组件
- 事件,定时器等闭包优化
点个关注:谢谢!
相关文章:
vue2 面试题带答案,万字总结
1. 什么是 vue Vue 是一套用于构建用户界面的渐进式框架。Vue.js 的主要特点:渐进式框架、声明式渲染、组件化、响应式数据绑定等; 2、MVC 和 MVVM 区别 MVC 是模型(model)-视图(view)-控制器(controller),控制器负责…...
git的常用用法(最简精华版)
一、工作区域(工作区,暂存区,本地仓库) 1、工作区 当前正在使用的文件 2、暂存区 已使用add命令提交的工作区的文件,会保存到暂存区 3、本地仓库 已使用commit命令提交的暂存区的文件,会保存到本地仓库。…...
哥德巴赫猜想渐行渐远
我现在的工作,表明经典分析可能出了问题,如此则连Vinogradov的三素数定理都不成立了,更别说基于L-函数方程的陈氏定理“12”了。事实上即使L-函数方程成立,由于我指出Siegel定理不成立,陈景润和张益唐的工作就不成立。…...
Spring Boot应用开发实战:构建高效、可维护的Web应用
Spring Boot应用开发实战:构建高效、可维护的Web应用 在当今快速迭代的软件开发环境中,Spring Boot凭借其“约定优于配置”的理念,迅速成为Java开发者构建微服务及Web应用的首选框架。它不仅简化了Spring应用的初始搭建以及开发过程,还通过自动配置、嵌入式服务器等特性,…...
keep-alive多级页面缓存实现
文章目录 keep-alive多级页面缓存实现只适用于页面是否缓存状态不变的情况对于上面的问题提供一种解决方案 keep-alive多级页面缓存实现 只适用于页面是否缓存状态不变的情况 网上有一种很普遍的教程,不使用keep-alive的include属性,而是通过在路由表中…...
ks 小程序sig3
前言 搞了app版的快手之后 (被风控麻了) 于是试下vx小程序版的 抓包调试 小程序抓包问题 网上很多教程, github也有开源的工具代码 自行搜索 因为我们需要调试代码,所以就用了下开源的工具 (可以用chrome的F12功能&a…...
图论之构造完全图
题目 2398: 信息学奥赛一本通T1489-构造完全图 时间限制: 2s 内存限制: 192MB 提交: 16 解决: 9 题目描述 对于完全图 G,若有且仅有一棵最小生成树为 T,则称完全图 G 是树 T 扩展出的。 给你一棵树 T,找出 T 能扩展出的边权和最小的完全图 G…...
RDD触发算子:一些常用的触发算子(count、foreach、saveAsTextFile、first)
文章目录 1、count算子功能语法 2、foreach算子功能语法 3、saveAsTextFile算子功能语法 4、first算子功能语法举例 1、count算子 功能 统计RDD集合中元素的个数,返回一个int值 语法 def count(self) -> int2、foreach算子 功能 对RDD中每个元素调用一次参数中…...
搭建RAGFlow
RAGFlow 是一款基于深度文档理解构建的开源 RAG(Retrieval-Augmented Generation)引擎。RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程,结合大语言模型(LLM)针对用户各类不同的复杂格式数据提供可靠…...
css中的box-sizing,记录
border-box:最终高度为height,默认包含padding border等属性 content-box:box-sizing默认值,最终大小为heightpaddingborder 等...
使用useCallback引发对闭包的理解
一、先简单介绍一下闭包: 闭包是 JavaScript 中的重要概念,它指的是一个函数可以“记住”并访问其词法作用域,即使在这个函数的外部被执行。简单来说,闭包是由函数及其相关的环境组合而成的。 闭包的特性 函数内部可以访问外部变量: 闭包…...
gvim添加至右键、永久修改配置、放大缩小快捷键、ctrl + c ctrl +v 直接复制粘贴、右键和还原以前版本(V)冲突
一、将 vim 添加至右键 进入安装目录找到 vim91\install.exe 管理员权限执行 Install will do for you:1 Install .bat files to use Vim at the command line:2 Overwrite C:\Windows\vim.bat3 Overwrite C:\Windows\gvim.bat4 Overwrite C:\Windows\evim.bat…...
腾讯云-COS
COS 对象存储 是一种可扩展的云端数据存储服务。它适用于存储任意类型的文件,并且可以针对这些文件进行访问控制。 CORS 跨域资源共享 是一种机制,它使用额外的HTTP头来告诉浏览器允许一个域上的Web应用请求另一个域上的资源。当需要从一个域名下的网页向…...
蓝桥杯每日真题 - 第16天
题目:(卡牌) 题目描述(13届 C&C B组C题) 解题思路: 题目分析: 有 n 种卡牌,每种卡牌的现有数量为 a[i],所需的最大数量为 b[i],还有 m 张空白卡牌。 每…...
基因组之全局互作热图可视化
引言 PlotHiC 是一个专为 Hi-C 数据可视化分析而设计的 Python 包。Hi-C 技术是一种能够检测染色体三维结构的实验方法,它能揭示 DNA 在细胞核内的三维组织结构。为了更好地展示和解释这些复杂的数据,PlotHiC[1] 可以帮助用户方便地绘制Hi-C 数据的热图。…...
基于Lora通讯加STM32空气质量检测WIFI通讯
目录 目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 1.电路图采用Altium Designer进行设计: 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着环境污染问题的日益严重,空气质量的监测与管理已经…...
STM32 极速入门第一天基础拓展 驱动i2c屏幕 ( 使用PlatformIO开发STM32单片机 )
输入输出模式解析 输出模式 在输出模式下,通常不需要设置上下拉电阻. 输出电平由 LL_GPIO_SetOutputPin 和 LL_GPIO_ResetOutputPin 函数直 接控制。 输入模式 在输入模式下,设置上下拉电阻是非常重要的. 输入引脚悬空时可能会导致不确定的电平…...
【WPF】Prism学习(五)
Prism Commands 1.错误处理(Error Handling) Prism 9 为所有的命令(包含AsyncDelegateCommand)提供了更好的错误处理。 避免用try/catch包装每一个方法根据不同遇到的异常类型来提供特定的逻辑处理可以在多个命令之间共享错误处…...
RabbitMQ的基本概念和入门
RabbitMQ 的基本概念和入门 RabbitMQ 是一款流行的开源消息队列中间件,实现了高级消息队列协议(AMQP)。它使用Erlang语言编写,具备高可用性、可扩展性和易用性等特点,广泛应用于各种分布式系统中。本文将详细介绍Rabb…...
Shell脚本6 -- 条件判断if
声明: 本文的学习内容来源于B站up主“泷羽sec”视频【shell编程(4)脚本与用户交互以及if条件判断】的公开分享,所有内容仅限于网络安全技术的交流学习,不涉及任何侵犯版权或其他侵权意图。如有任何侵权问题,…...
经验笔记:从生成 SSH 密钥到成功连接测试(以Gitee为例)
从生成 SSH 密钥到成功连接测试的经验笔记(以Gitee为例) 1. 生成 SSH 密钥对 选择合适的加密算法 ED25519: 密钥长度:私钥 256 位(32 字节),公钥 256 位(32 字节)&#…...
Object.defineProperty和响应式
Object.defineProperty()是一个监听对象属性变化的方法。一般情况下我们是不会直接使用的,或者说我们遇到的场景还没有这么高级。 最有名的例子就是Vue2的响应式实现,就是通过这个方法来实现的。 用起来不难,就是个API,只是用的…...
前端web
题目:制作带有下拉悬停菜单的导航栏 效果图 一、先制作菜单栏 <body> <div id"menu"> <div id"container"> <div class"item">游戏1 <div cla…...
DDNet 服务器配置教程 Linux 环境
DDNet 服务器配置教程 Linux 环境 配置之前可以参考一下官方网址给出的内容 官方网址:DDNet官方 环境说明 OS: Debian 11 安装 可以直接从官网下载,也可以使用这个链接: Linux_DDNet 下载链接 上文中给的链接会因为更新而出现版本落后的情况&#x…...
Vue 2 —监视器实现动态切换表单属性值
目录 一、需求背景 二、监视器语法 三、实例展示 1、HTML部分 2、JS部分 四、使用场景总结 1. 表单验证 2. 动态更新 UI 3. 数据同步 4. 计算属性的替代方案 计算属性的优势 : 简洁性: 监视器的优势 : 灵活性: 多属性依赖: 副…...
Qt_day10_程序打包(完结)
目录 1. 设置图标 2. Debug和Release版本 3. 动态链接库 4. 打包 5. 联系项目要求 Qt开发的程序最终都是要给用户使用的,用户的电脑上不可能装一个Qt的开发环境导入项目使用。因此项目项目开发完成后需要打包——制作成安装包,用户直接下载并安装即可使用…...
golang通用后台管理系统09(系统操作日志记录)
1.日志工具类 package log/**** 日志记录 wangwei 2024-11-18 15:30*/ import ("log""os""path/filepath""time" )// 获取以当前日期命名的日志文件路径 func getLogFilePath() string {currentDate : time.Now().Format("2006-…...
如何确保爬取的数据准确性和完整性?
在数据驱动的业务环境中,爬虫程序的准确性和完整性至关重要。本文将探讨如何使用Java编写爬虫程序,并确保其在爬取数据时的准确性和完整性。 1. 精确的HTML解析 确保数据准确性的第一步是精确地解析HTML。Jsoup是Java中常用的HTML解析库,它提…...
【java】JDK安装
Java Downloads | Oracle 中国 next 注意安装的路径 环境变量...
科技改变工作方式:群晖NAS安装内网穿透实现个性化办公office文档分享(1)
文章目录 前言1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 前言 本文将详细介绍如何在群晖NAS上安装Synology Office和Synology Drive Server,并利用Cpolar内网穿透工具为本地文档配置固定的公网…...
b2b网站推广/谷歌在线浏览器免费入口
点击上方“iOS开发”,选择“置顶公众号” 关键时刻,第一时间送达! 科技公司纷纷投入原创节目制作,苹果杀出重围或许不是什么难事。 如今市场竞争越来越激烈,对于许多电视台来说,能够吸引到观众观看的就是独…...
网站建设大作业/软文营销平台
最近在整个移动端富文本编辑器。写完后,在安卓端表现良好,在苹果端测试让我直吐血。开始在网上找了一圈,也没发现自己中意的那款。 今天无意中发现了FroalaEditor,经过在移动端测试一番,表现的好的不要不要的。只是如果…...
建设人才信息网是什么网站/南宁网站公司
文章目录1.1 为什么要过渡到IPv6原因1:IPv4地址耗尽原因2:让只使用IPv6的客户访问原因3:提升性能原因4:加固当前的网络。1.2 IPv6的历史1.3 IPv6的优点1.极大扩展的地址空间:2.无状态自动配置3.消除了NAT/PAT(网络地址…...
做微课常用的网站有哪些/福州百度推广排名优化
插件描述:clock.js是一款简单的HTML5模拟时钟jQuery插件。该HTML5模拟时钟基于Canvas制作,有3种内置的主题,它带有时钟表盘界面和数字刻度,简单实用。使用方法使用该时钟插件需要在页面中引入jquery和clock.js文件。HTML结构可以实…...
南宁小程序定制开发/seo基础入门教程
第一步:在窗体中添加一个PanelControl控件,该控件包含在工具箱中的DX.14.1: Navigation & Layout组件中。将该控件的Dock属性设置为“Fill”(此时该控件可以随着窗体缩放)。 第二步:在PanelControl控件中添加一个…...
仪征网站建设公司哪家好/企业营销策略分析论文
1. 概述 中断是指出现需要时, CPU暂停执行当前程序,转而执行新程序的过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的事务,此时, CPU暂时中止当前程序的执行转而处理这个事务,这个过程就叫做中…...