IT评测·应用市场-qidao123.com

标题: 2024 前端Vue面试题大全汇总 (82道)_vue面试题2024 [打印本页]

作者: 我可以不吃啊    时间: 2025-1-10 15:26
标题: 2024 前端Vue面试题大全汇总 (82道)_vue面试题2024
42、界说指令(v-check、v-focus)的法有哪些?它有哪些钩函数?另有哪些钩函数参数?

43、vue 的两个核点
数据驱动,组件系统

44、delete 和 Vue.delete 删除数组的区别

45、Vue-router 跳转和 location.href 有什么区别
使 location.href=/url 来跳转,简单便,但是刷新了页;使 history.pushState(/url), 刷新页,静态跳转;引进 router,然后使 router.push(/url) 来跳转,使了 diff 算法,实现了按需加载,淘汰了 dom 的消耗。其实使 router 跳转和使 history.pushState() 没什么差别,由于 vue-router 就是了 history.pushState(), 尤其是在 history 模式下。
46、RouterLink 在 IE 和 Firefox 中不起作(路由不跳转)的问题

只 a 标签,不使 button 标签

使 button 标签和 Router.navigate 法

47、请说下封装 vue 组件的过程?
先,组件可以提升整个项的开辟效率。能够把页抽象成多个相对独的模块,解决了我们传统项开辟:效率低、难维护、复性等问题。
然后,使 Vue.extend 法创建个组件,然后使 Vue.component 法注册组件。组件必要数据,可以在 props 中接受界说。组件修改好数据后,想把数据传递给组件。可以采 emit 法。
48、params 和 query 的区别
法:query 要 path 来引,params 要 name 来引,吸收参数都是类似的,分别是 this.
r
o
u
t
e
r
.
q
u
e
r
y
.
n
a
m
e

t
h
i
s
.
router.query.name 和 this.
router.query.name和this.router.params.name。url 地址显:query 更加类似于我们 ajax 中 get 传参,params 则类似于 post,说的再简单点,前者在欣赏器地址栏中显参数,后者则不显
注意点:query 刷新不会丢失 query 的数据 params 刷新会丢失 params 的数据
49、vue mock 数据
在项中实验了 mockjs,mock 数据,实现前后端分离开辟。关于 mockjs,官描述的是

总结:在后端接没有开辟完成之前,前端可以已有的接档,在真实的哀求上拦截 ajax,并根据 mockjs 的 mock 数据的规则,模拟真实接返回的数据,并将随机的模拟数据返回到场相应的数据交互处理,这样真正实现了前配景的分离开辟。
与以往的模拟的假数据不同,mockjs 可以带给我们的是:在配景接未开辟完成之前模拟数据,并返回,完成前台的交互;在配景数据完成之后,你所做的只是去掉 mockjs:停拦截真实的 ajax,仅此已。
50、vue 初始化页闪动问题
使 vue 开辟时,在 vue 初始化之前,由于 div 是不会 vue 管的,以是我们写的代码在还没有解析的情况下会容易出现花屏现象,看到类似于 {{message}} 的字样,虽然般情况下这个时间很短暂,但是我们还是有必要解决这个问题的。
先:在 css 加上 [v-cloak]{display:none;},如果没有彻底解决问题,则在根元素加上 style=“display:none;” :style=“{display:block}”
51、vue 更新数组时触发视图更新的法
push();pop();shift();unshift();splice();sort();reverse()
52、vue 常的 UI 组件库
Mint UI,element,VUX
53、mint-ui 是什么?怎么使?说出少三个组件使法?
基于 vue 的前端组件库。npm 安装,然后 import 样式和 js,vue.use(mintUi)全局引。在单个组件局部引:import {Toast} from ‘mint-ui’。

54、Vue router-link 在电脑上有,在安卓上没反应怎么解决?
Vue 路由在 Android 机上有问题,babel 问题,安装 babel polypill 插件解决
55、Vue2 中注册在 router-link 上变乱效解决法
使 @click.native。原因:router-link 会阻 click 变乱,.native 指直接监听个原变乱。
56、简述 MVVM 框架

Model: 代表数据模子,也可以在 Model 中界说数据修改和操作的业务逻辑。
View: 代表 UI 组件,它负责将数据模子转化成 UI 展现出来。
ViewModel: 监听数据模子的改变和控制视图行为、处理用户交互,简单理解就是一个同步 View 和 Model 的对象,连接 Model 和 View。
57、vue2 和 vue3 区别

58、v-if 和 v-show

59、v-for 和 v-if 优先级

60、介绍 Vue 插槽用法

插槽slot可以理解为占坑,当使用一个组件的时间,在组件标签里的对应的内容就会替换掉这个组件中的slot标签。
插槽分为默认插槽,具名插槽,作用域插槽。
默认插槽子组件中用slot标签来确定渲染位置,父组件使用它时直接在子组件的标签内写入内容即可
  1. //子组件
  2. <template>
  3.     <slot />
  4. </template>
  5. //父组件
  6. <Child>
  7.   <div>默认插槽</div>
  8. </Child>
复制代码
具名插槽
顾名思义就是具有名字的插槽,子组件中可以用name认识对slot命名,父组件在使用的时间通过template中的v-slot:name大概#name来界说这个插槽中的内容
  1. //子组件
  2. <template>
  3.   <slot ></slot>
  4. </template>
  5. //父组件
  6. <Child>
  7.     <template v-slot:content>具名插槽内容</template>
  8. </Child>
复制代码
作用域插槽
子组件中的slot可以通过类似组件属性传递的方式将子组件的值传递给父组件中这个子组件的插槽内容中(子组件标签内),在父组件使用子组件的时间要用v-slot的值进行吸收这些参数,默认插槽可以将其直接写在子组件标签上,具名插槽则写在template上。而传过来的值只能在子组件标签中大概template标签中使用。以是在父组件作用域中获取到了子组件作用域中的变量,可以以为作用域插槽延伸了子组件数据的作用范围,因此叫做作用域插槽
61、过滤器的作用,如何实现一个过滤器

过滤器是用来过滤数据的,在 Vue 中使用 filters 来过滤数据,filters 不会修改数据,而是过滤数据,改变用户看到的输出
使用场景

过滤器是一个函数,它会把表达式中的值始终当作函数的第一个参数。过滤器用在插值表达式 {{}} 和 v-bind 表达式 中,然后放在操作符 “ | ” 后面进行指示
  1. <li>商品价格:{{item.price | filterPrice}}</li>
  2. filters: { filterPrice (price) { return price ? ('¥' + price) : '--' } }
复制代码
注意 vue3 已经移除了过滤器
62、常见的变乱修饰符及其作用


63、v-model 如何实现的

v-model 其实是一个语法糖, 比如
  1. <input v-model="message" />
  2. 等同于
  3. <input
  4.    :value="message"
  5.    @input="message=$event.target.value"
  6. >
复制代码
63、Vue2 中给 data 中的对象属性添加一个新的属性时会发生什么?如何解决?

Vue2 中对象添加新属性绑定的视图不会更新, 由于 Vue2 中 Object.defineProperty 挟制不到 data 对象中新增的属性, 可以使用this.$set(this.obj, 'b', 'obj.b')解决
   $set() 方法相当于手动的去把 obj.b 处理成一个相应式的属性,此时视图也会跟着改变了。
  64、Vue 插件用法

面试一样平常会问你如何写一个 vue 插件, 以是没写过 vue 插件的最好去亲自体验一下
回复:
vue实例会有一个use函数, 它接受的是一个带有install函数的对象和一个可选的选项对象, 当我们使用 vue.use(plugin)大概app.use(plugin)会调用我们插件的install属性的函数, 而且将当前组件的实例传进来. 以是在插件中就可以对这个实例进行一些操作来实现我们插件的功能
65、Vue 自界说指令

vue 官方提供了 v-text、v-for、v-model、v-if 等常用的指令。除此之外 vue 还允许开辟者自界说指令。面试经常会问什么是自界说指令 你用自界说指令做过哪些功能
回复 1: 什么是自界说指令
它的 binding 会是这个对象
  1. {
  2.     arg: 'foo',
  3.     modifiers: { bar: true },
  4.     value: /* `baz` 的值 */,
  5.     oldValue: /* 上一次更新时 `baz` 的值 */
  6. }
复制代码

回复 2: 你用自界说指令做过哪些功能
66、computed 和 watch

页面多次使用addSum, 但是只会打印一次 “内部逻辑执行”
67、vue 生命周期

Vue2(选项式 API)
Vue3(setup)
描述
beforeCreate
-
实例创建前
created
-
实例创建后
beforeMount
onBeforeMount
DOM 挂载前调用
mounted
onMounted
DOM 挂载完成调用
beforeUpdate
onBeforeUpdate
数据更新之前被调用
updated
onUpdated
数据更新之后被调用
beforeDestroy
onBeforeUnmount
组件烧毁前调用
destroyed
onUnmounted
组件烧毁完成调用
68、vue 父子组件生命周期执行序次

这个相对于上一个问题稍微复杂一点, 可以试着理解记忆大概直接记住吧
渲染过程
#mermaid-svg-czhhfdPqQmB0CYtp {font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-czhhfdPqQmB0CYtp .error-icon{fill:#552222;}#mermaid-svg-czhhfdPqQmB0CYtp .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-czhhfdPqQmB0CYtp .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-czhhfdPqQmB0CYtp .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-czhhfdPqQmB0CYtp .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-czhhfdPqQmB0CYtp .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-czhhfdPqQmB0CYtp .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-czhhfdPqQmB0CYtp .marker{fill:#333333;stroke:#333333;}#mermaid-svg-czhhfdPqQmB0CYtp .marker.cross{stroke:#333333;}#mermaid-svg-czhhfdPqQmB0CYtp svg{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-czhhfdPqQmB0CYtp .label{font-family:“trebuchet ms”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-czhhfdPqQmB0CYtp .cluster-label text{fill:#333;}#mermaid-svg-czhhfdPqQmB0CYtp .cluster-label span{color:#333;}#mermaid-svg-czhhfdPqQmB0CYtp .label text,#mermaid-svg-czhhfdPqQmB0CYtp span{fill:#333;color:#333;}#mermaid-svg-czhhfdPqQmB0CYtp .node rect,#mermaid-svg-czhhfdPqQmB0CYtp .node circle,#mermaid-svg-czhhfdPqQmB0CYtp .node ellipse,#mermaid-svg-czhhfdPqQmB0CYtp .node polygon,#mermaid-svg-czhhfdPqQmB0CYtp .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-czhhfdPqQmB0CYtp .node .label{text-align:center;}#mermaid-svg-czhhfdPqQmB0CYtp .node.clickable{cursor:pointer;}#mermaid-svg-czhhfdPqQmB0CYtp .arrowheadPath{fill:#333333;}#mermaid-svg-czhhfdPqQmB0CYtp .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-czhhfdPqQmB0CYtp .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-czhhfdPqQmB0CYtp .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-czhhfdPqQmB0CYtp .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-czhhfdPqQmB0CYtp .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-czhhfdPqQmB0CYtp .cluster text{fill:#333;}#mermaid-svg-czhhfdPqQmB0CYtp .cluster span{color:#333;}#mermaid-svg-czhhfdPqQmB0CYtp div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-czhhfdPqQmB0CYtp :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;}
父beforeCreate
父created
父beforeMount
子beforeCreate
子created
子beforeMount
子mounted
父mounted
更新过程
#mermaid-svg-dU9lCSZuMx8fiJaw {font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dU9lCSZuMx8fiJaw .error-icon{fill:#552222;}#mermaid-svg-dU9lCSZuMx8fiJaw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-dU9lCSZuMx8fiJaw .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-dU9lCSZuMx8fiJaw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-dU9lCSZuMx8fiJaw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-dU9lCSZuMx8fiJaw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-dU9lCSZuMx8fiJaw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-dU9lCSZuMx8fiJaw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-dU9lCSZuMx8fiJaw .marker.cross{stroke:#333333;}#mermaid-svg-dU9lCSZuMx8fiJaw svg{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-dU9lCSZuMx8fiJaw .label{font-family:“trebuchet ms”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-dU9lCSZuMx8fiJaw .cluster-label text{fill:#333;}#mermaid-svg-dU9lCSZuMx8fiJaw .cluster-label span{color:#333;}#mermaid-svg-dU9lCSZuMx8fiJaw .label text,#mermaid-svg-dU9lCSZuMx8fiJaw span{fill:#333;color:#333;}#mermaid-svg-dU9lCSZuMx8fiJaw .node rect,#mermaid-svg-dU9lCSZuMx8fiJaw .node circle,#mermaid-svg-dU9lCSZuMx8fiJaw .node ellipse,#mermaid-svg-dU9lCSZuMx8fiJaw .node polygon,#mermaid-svg-dU9lCSZuMx8fiJaw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-dU9lCSZuMx8fiJaw .node .label{text-align:center;}#mermaid-svg-dU9lCSZuMx8fiJaw .node.clickable{cursor:pointer;}#mermaid-svg-dU9lCSZuMx8fiJaw .arrowheadPath{fill:#333333;}#mermaid-svg-dU9lCSZuMx8fiJaw .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-dU9lCSZuMx8fiJaw .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-dU9lCSZuMx8fiJaw .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-dU9lCSZuMx8fiJaw .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-dU9lCSZuMx8fiJaw .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-dU9lCSZuMx8fiJaw .cluster text{fill:#333;}#mermaid-svg-dU9lCSZuMx8fiJaw .cluster span{color:#333;}#mermaid-svg-dU9lCSZuMx8fiJaw div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-dU9lCSZuMx8fiJaw :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;}
父beforeUpdate
子beforeUpdate
子updated
父updated
烧毁过程
#mermaid-svg-ZdXs7utVab0XZIpe {font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZdXs7utVab0XZIpe .error-icon{fill:#552222;}#mermaid-svg-ZdXs7utVab0XZIpe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ZdXs7utVab0XZIpe .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-ZdXs7utVab0XZIpe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ZdXs7utVab0XZIpe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ZdXs7utVab0XZIpe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ZdXs7utVab0XZIpe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ZdXs7utVab0XZIpe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ZdXs7utVab0XZIpe .marker.cross{stroke:#333333;}#mermaid-svg-ZdXs7utVab0XZIpe svg{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ZdXs7utVab0XZIpe .label{font-family:“trebuchet ms”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-ZdXs7utVab0XZIpe .cluster-label text{fill:#333;}#mermaid-svg-ZdXs7utVab0XZIpe .cluster-label span{color:#333;}#mermaid-svg-ZdXs7utVab0XZIpe .label text,#mermaid-svg-ZdXs7utVab0XZIpe span{fill:#333;color:#333;}#mermaid-svg-ZdXs7utVab0XZIpe .node rect,#mermaid-svg-ZdXs7utVab0XZIpe .node circle,#mermaid-svg-ZdXs7utVab0XZIpe .node ellipse,#mermaid-svg-ZdXs7utVab0XZIpe .node polygon,#mermaid-svg-ZdXs7utVab0XZIpe .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ZdXs7utVab0XZIpe .node .label{text-align:center;}#mermaid-svg-ZdXs7utVab0XZIpe .node.clickable{cursor:pointer;}#mermaid-svg-ZdXs7utVab0XZIpe .arrowheadPath{fill:#333333;}#mermaid-svg-ZdXs7utVab0XZIpe .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ZdXs7utVab0XZIpe .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ZdXs7utVab0XZIpe .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-ZdXs7utVab0XZIpe .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-ZdXs7utVab0XZIpe .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ZdXs7utVab0XZIpe .cluster text{fill:#333;}#mermaid-svg-ZdXs7utVab0XZIpe .cluster span{color:#333;}#mermaid-svg-ZdXs7utVab0XZIpe div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ZdXs7utVab0XZIpe :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;}
父beforeDestroy
子beforeDestroy
子destroyed
父destroyed
注意如果子组件是异步组件的话它们的执行序次会发生改变,会先执行完父组件的生命周期然后再执行子组件的生命周期
69、vue 导航 (路由保卫)

路由保卫分为全局路由保卫路由独享保卫组件路由保卫


beforeEnter, 一样平常设置在路由设置文件中(router/index.js),对进入某个路由之进步行相关操作

   吸收to、from、next三个参数
   70、Vue-Router 的懒加载如何实现

使用箭头函数 + import 动态加载
  1. const router = new VueRouter({
  2.   routes: [{ path: "/list", component: () => import("@/components/list.vue") }],
  3. });
复制代码
71、路由的 hash 和 history 模式的区别

Vue-Router 有两种模式:hash 模式和 history 模式。默认的路由模式是 hash 模式。
简介: hash 模式是开辟中默认的模式,它的 URL 带着一个 #,比方:www.abc.com/#/vue,它的 hash 值就是 #/vue。
特点:hash 值会出如今 URL 里面,但是不会出如今 HTTP 哀求中,对后端完全没有影响。以是改变 hash 值,不会重新加载页面。这种模式的欣赏器支持度很好,低版本的 IE 欣赏器也支持这种模式。hash 路由被称为是前端路由,已经成为 SPA(单页面应用)的标配。
原理: hash 模式的主要原理就是 onhashchange() 变乱:
  1. window.onhashchange = function (event) {
  2.   console.log(event.oldURL, event.newURL);
  3.   let hash = location.hash.slice(1);
  4. };
复制代码
简介: history 模式的 URL 中没有 #,它使用的是传统的路由分发模式,即用户在输入一个 URL 时,服务器会吸收这个哀求,并解析这个 URL,然后做出相应的逻辑处理。 特点: 当使用 history 模式时,URL 就像这样:abc.com/user/id。相比 hash 模式更加好看。但是,history 模式必要配景设置支持。如果配景没有正确设置,访问时会返回 404。 API: history api 可以分为两大部分,切换汗青状态和修改汗青状态:
修改汗青状态:包括了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法,这两个方法应用于欣赏器的汗青记录栈,提供了对汗青记录进行修改的功能。只是当他们进行修改时,虽然修改了 url,但欣赏器不会立刻向后端发送哀求。如果要做到改变 url 但又不刷新页面的效果,就必要前端用上这两个 API。
切换汗青状态: 包括 forward()、back()、go() 三个方法,对应欣赏器的进步,退却,跳转操作。
总结



第一次跳槽十分忐忑不安,和没毕业的时间开始找工作是一样的感受,真的要相信自己,有条不紊的进行。如果有我能帮助的地方欢迎随时找我,比如简历修改、内推、最起码,可以把烦心事说一说,人嘛都会有苦恼的~
祝大家都有美好的将来,拿下满足的 offer。
加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4