【Vue 面试题10道】我好像之前想过要写,不过之前JavaScript面试题比较多,就暂时略过了,这些应该几乎把常问的都包括了

news2024/10/6 22:26:25

在这里插入图片描述

博主:_LJaXi Or 東方幻想郷
专栏: 前端面试题
开发工具:Vs Code

本题针对 Vue2
这些几乎把常用的都包括了,问别的就没意思了,毕竟工作拧螺丝嘛
我都好久不用Vue了,不过用了React再回看Vue感觉好简单啊…
其实工作上都很快能捡起来,就是面试问题是必须的(啥时候能结束这种无聊的面试问题环节啊…)接着往下看吧

Vue2 前端面试题

  • 0. 自我介绍模板(独家原创 doge)
  • 1. Vue中父子传值操作
    • 父传子
    • 子传父
  • 2. 回顾那些Vue生命周期钩子函数
    • beforeCreate
    • created
    • beforeMount
    • mounted
    • beforeUpdate
    • updated
    • beforeUnmount (2.x版本中为beforeDestroy)
    • unmounted (2.x版本中为destroyed)
  • 3. Vue中的computed和watch之间的区别
  • 4. Vue的路由有几种模式,介绍作用
  • 5. 路由传参 params 和 query 的区别
  • 6. Vue 路由的 $route 和 $router 各自有什么作用 / 区别
  • 7. Vue的自定义指令
  • 8. Vue 中 Vuex 的作用 / 里面分别有什么是做什么的
  • 9. Vue 中 Mixins 的作用 / 怎么使用
  • 10. 讲解一下 MVVM
  • 11. 何时使用keep-alive?为什么,有什么作用?
  • 12. v-show 与 v-if 的区别
  • 13. 为何v-for要用key???
  • 14. 请列举出Vue中一些指令,以及相对应的用法
  • 15. Vue 中的 修饰符 有哪些???

0. 自我介绍模板(独家原创 doge)

面试官您好,我叫 ***,今年 ** 岁
目前在前端领域上有一定的工作经验,之前在 ** 公司 以及 ** 公司就职web前端 / 后端工程师
主要负责的项目有 *** 项目,*** 项目
主要负责了**模块开发
我的兴趣爱好是写博客,喜欢把自己工作遇到的问题或一些知识记录在博客中充实自己 | (根据自己的实际情况介绍爱好)闲暇之余也会 *******
今天来到贵公司面试深感荣幸,希望今后能与大家一起共事,自我介绍完毕,谢谢!

面试主打 真实情感,以及让面试官快速了解到你的基本情况,emm,其余的不便多说,看运气吧

1. Vue中父子传值操作

父传子子传父
我们项目中常用到这两个功能,注意,父传子 传递数据为单向数据流传输,由 props 接收
子传父 即是使用自定义事件实现的数据回调,这两个数据流是不同的

父传子

App.vue 父组件

<template>
  <div id="app">
    <HelloWorld msg="我是父组件传过来的值,用props接收~"/>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'App',
  
  components: {
    HelloWorld
  }
}
</script>

HelloWorld.vue 子组件

<template>
  <div class="hello">
      {{ msg }}: props: { msg: String }
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  
  props: {
    msg: String
  }
}
</script>

父传子: 我们在父组件中引入子组件,然后通过子组件标签定义一个用于子组件可接收的变量 msg = “我们要传递的值
然后再子组件中使用 props 接收父组件中传递过来的变量,这就是父传子,可传递任意参数

子传父

HelloWorld.vue 子组件

<template>
  <div class="hello">
    <button @click="sonGiveFatherValue">传递数据给父组件</button>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',

  methods: {
    sonGiveFatherValue() {
      const data = '我是传递给父组件的一个字符串'
      this.$emit('shuju', data)
    }
  }
}
</script>

App.vue 父组件

<template>
  <div id="app">
    <HelloWorld @shuju="childData"/> 
    <div>接收子组件的数据: {{fatherOfChildValue}}</div>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'App',
  data() {
    return {
      fatherOfChildValue: ''
    }
  },
  components: {
    HelloWorld
  },

  methods: {
    childData(val) {
      this.fatherOfChildValue = val;
    }
  }
}
</script>

子传父: 是不是顺序颠倒了,子传父,便于理解,先看子组件
举个例子,比如我们需要在父组件中添加一个按钮,但是点开按钮就是一个弹窗,这时候我们就可以把这个弹窗封装为一个子组件,正是因为封装,所以才会有的数据传输hhhh…
题外话:Vue可是很好用的,至少比React的单向数据流好…


不闲扯,聊回正题,首先看 HelloWorld组件 我们需要把一个值,由子组件使用事件传递给父组件,注意点击事件下的 this.$emit(传递的事件名,传递的值)
然后我们在父组件中的子组件标签中 使用它 @shuju="childData" 这就是绑定一个自定义事件,然后事件参数就是你传递过来的那个值

主要看这两行你就能理解

<HelloWorld @shuju="childData"/> 

<script>
childData(val) {
  this.fatherOfChildValue = val;
}
</script>

2. 回顾那些Vue生命周期钩子函数

像我这种过目即忘但是会写的人,回顾面试题确实是有些痛苦的…

beforeCreate

在实例初始化之前调用,此时组件的选项还未初始化

created

在实例创建完成后调用,此时已经完成数据观测、属性和方法的运算,但尚未生成真实的 DOM 并完成挂载

beforeMount

在组件挂载之前调用,此时已经生成了真实的 DOM,但尚未挂载到页面中

mounted

在组件挂载完成后调用,此时组件已经被渲染到页面中

beforeUpdate

在数据变化导致重新渲染之前调用,此时页面尚未重新渲染

updated

在数据变化导致重新渲染之后调用,此时页面已经重新渲染完成

beforeUnmount (2.x版本中为beforeDestroy)

在组件实例销毁之前调用,此时组件尚未被销毁

unmounted (2.x版本中为destroyed)

在组件实例销毁后调用,此时组件已经被销毁

3. Vue中的computed和watch之间的区别

computed是计算属性,是基于已有的属性计算得出的新属性,只要依赖的属性不发生变化,计算结果也不会变化。watch是观察者,用来监听数据的变化,当数据发生变化时,执行相应的操作

computed 示例

<template>
  <div>
    <h2>计算属性示例</h2>
    
    <input v-model="firstNumber" type="number" placeholder="输入第一个数">
    <input v-model="secondNumber" type="number" placeholder="输入第二个数">

    <p>两数之和: {{ sum }}</p>
    <p>两数之差: {{ difference }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      firstNumber: 0,
      secondNumber: 0
    };
  },
  computed: {
    sum() {
      return parseInt(this.firstNumber) + parseInt(this.secondNumber);
    },
    difference() {
      return parseInt(this.firstNumber) - parseInt(this.secondNumber);
    }
  }
};
</script>

watch 示例

<template>
  <div>
    <h2>监听数据示例</h2>
    
    <input v-model="message" type="text" placeholder="输入消息">

    <p>消息长度: {{ messageLength }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: '',
      messageLength: 0
    };
  },
  watch: {
    message(newMessage) {
      // newMessage 为新的消息值
      this.messageLength = newMessage.length;
    }
  }
};
</script>

4. Vue的路由有几种模式,介绍作用

Vue的路由有2种模式:hash模式、history模式

hash

在hash模式下,URL中的路径会以#符号开始,这种模式在旧版浏览器中很常见。它通过监听URL中hash值的变化来实现路由切换

// 在路由配置中使用hash模式
const router = new VueRouter({
  mode: 'hash',
  routes: [
    // 路由配置
  ]
})

history

history模式:
在history模式下,URL中的路径不包含#符号,看起来更加直观和美观。它使用HTML5的history API来实现路由切换

// 在路由配置中使用history模式
const router = new VueRouter({
  mode: 'history',
  routes: [
    // 路由配置
  ]
})

5. 路由传参 params 和 query 的区别

params 参数是用于传递动态路由参数的,即在路由路径中定义的参数,如 /user/:id 中的 id
使用 params 传递参数时,参数会被编码到URL中,例如:/user/1


query 参数则是用于传递查询参数的,它会被附加在URL的末尾以查询字符串的形式,如/user? id=1
使用 query 传递参数时,参数会以键值对的形式拼接在URL后面。
params参数可以在路由组件中通过 r o u t e . p a r a m s 来获取,而 q u e r y 参数可以通过 route.params来获取,而query参数可以通过 route.params来获取,而query参数可以通过route.query来获取

编程式 params

data:{
  username: ''
},
login() {
  ...
  this.$router.push({
    name: 'home', //注意使用 params 时一定不能使用 path
    params: { username: this.username },
  })
}

声明式

<router-link :to="{ name: 'home', params: { username: username } }">

编程式 query

data:{
  username: ''
},
login() {
  ...
  this.$router.push({
    path: '/home',
    query: { username: this.username },
  })
}

声明式

<router-link :to="{ path: '/home', query: { username: username } }">

6. Vue 路由的 $route 和 $router 各自有什么作用 / 区别

router 用来访问 Vue 中的路由实例,可以进行路由跳转和路由信息的获取。
route用来访问当前路由的信息,包括路由路径、参数、查询等。

7. Vue的自定义指令

Vue 自定义指令 ✨ 博主: pingting_

8. Vue 中 Vuex 的作用 / 里面分别有什么是做什么的

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。

调试工具:vue devtools (Vue开发工具)

Vuex就像眼镜:您自会知道什么时候需要它。

详看我的这篇博客: Vuex 状态管理 ✨

9. Vue 中 Mixins 的作用 / 怎么使用

当使用Vue框架时,mixins提供了一种机制,可以在多个组件之间共享可重用的逻辑
通过使用mixins,可以将特定的属性、方法、计算属性、钩子函数等混合到多个组件中,从而实现代码的复用和组件的扩展。

src 目录下创建一个 mixins 文件夹,文件夹下新建自己要定义的混入对象 js 文件。使用对象的形式来定义混入对象,在对象中可定义与vue组件一样的 data、components、created、methods 、computed、watch 等属性,并通过 export 导出该对象.

export const  pageMixin = {
    data() {
        return {
            page: { // 分页信息
                pageNo: 1, // 当前页
                limit: 10, // 每页行数
                total: 0, // 列表总数量
            },        
            tableList: [], // 列表数据
            loading: false, // 加载列表数据的Loading
            PAGE_SIZES: [5, 10, 20, 30, 50, 100], // 每页行数列表,用于切换每页行数
            LAYOUT: "total, sizes, prev, pager, next, jumper" // Element表格组件中使用的功能
        }
    },
    methods: {
        // 查询列表数据
        queryList() {},
        // 修改当前页
        handleCurrentChange(pageNo) {
            this.page.pageNo = pageNo;         
            this.queryList();
        },
        // 修改每页行数
        handleSizeChange(limit) {
            this.page.pageNo = 1;
            this.page.limit = limit;
            this.queryList();
        },
    },
}

mixin的使用
在需要调用的组件页面中引入 pageMixin.js 文件

import {pageMixin} from "@/mixins/pageMixin"
export default {
    mixins: [ pageMixin ],
    data() {
      return {    	
      }
    }        
}

10. 讲解一下 MVVM

Modal(模型) - View(视图) - ViewModal(视图模型)
视图模型层 分离,并引入中间层 视图模型
在MVVM模式中,视图通过数据绑定方式与视图模型进行通信。这意味着当视图模型中的数据发生变化时,视图会自动进行更新
好处: 实现代码的可维护性、灵活性和可重用性,尤其在构建大型、复杂的用户界面时非常有用

11. 何时使用keep-alive?为什么,有什么作用?

在前端开发中,Vue.js提供了一个特殊的组件 <keep-alive>,用于在组件树中缓存组件的实例,以便在切换组件时保留其状态。我们可以使用 <keep-alive> 来优化性能,减少不必要的组件销毁和重建操作

12. v-show 与 v-if 的区别

v-show 通过 css display 控制显示和隐藏,v-if 组件真正的渲染和销毁,而不是显示和隐藏,频繁切换状态使用 v-show 否则 v-if

13. 为何v-for要用key???

快速查找到节点,减少渲染次数,提升渲染性能

14. 请列举出Vue中一些指令,以及相对应的用法

v-html   //html

v-text   //元素里要显示的内容

v-bind:data    //绑定动态数据   :data

v-on:click      //绑定事件      @click

v-for

v-if //条件渲染指令

v-model    //双向绑定,用于表单

15. Vue 中的 修饰符 有哪些???

以下为常用的 Vue 修饰符

.prevent
阻止默认行为,即调用事件的 event.preventDefault() 方法。常用于阻止表单提交或链接跳转等默认行为。

.stop
停止事件冒泡,即调用事件的 event.stopPropagation() 方法。当一个元素上触发了某个事件时,该事件会向上冒泡,影响到父元素中相同类型的事件。使用 .stop 修饰符可以阻止事件继续向上冒泡。

.capture
使用事件捕获模式,即在捕获阶段触发事件,而不是在冒泡阶段。默认情况下,事件是在冒泡阶段触发的。

.self
只有当事件是由当前元素本身触发时才会触发事件处理程序。当事件在当前元素之外的子元素中触发时,事件处理程序不会被调用。

.once
只触发一次事件处理程序,即事件处理程序只会执行一次,之后就会被移除。

.passive
指示监听器永远不会调用 event.preventDefault()。这个修饰符用于提高页面滚动的性能。但要注意,一旦对同一个事件同时使用了 .passive 和 .prevent 修饰符,.prevent 将会被忽略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/768619.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库性能优化中的查询优化

数据库性能优化中的查询优化 概述 在数据库应用中&#xff0c;查询操作是最常见的操作之一。查询优化是数据库性能优化的关键一环&#xff0c;通过对查询语句和查询执行计划的优化&#xff0c;可以显著提高数据库系统的性能和效率。本文将介绍查询优化的相关知识&#xff0c;…

结构型模式 - 代理模式

概述 由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时&#xff0c;访问对象不适合或者不能直接引用目标对象&#xff0c;代理对象作为访问对象和目标对象之间的中介。 Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期…

Docker 基础知识解析:容器与传统虚拟化对比:资源利用、启动时间、隔离性和部署效率

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

Vscode配置grpc+c#+proto

首先是环境配置&#xff0c;用的dotnet5.0的sdk&#xff0c;所以Vscode的C#插件版本要选择1.24&#xff0c;然后需要配置C# Snippets、NuGget Package Manager、vscode-proto3、vscode-solution-extension&#xff08;可选&#xff09;。 以vscode-solution-extension为例新建A…

【大数据之Hive】二十四、HQL语法优化之任务并行度

1 优化说明 Hive的计算任务由MapReduce完成&#xff0c;并行度调整分为Map端和Reduce端。 1.1 Map端并行度 Map端的并行度及Map的个数&#xff0c;由输入文件的切片数决定&#xff0c;一般情况下Map端并行度不需要手动调整。   在特殊情况下&#xff08;查询的表中存在大量小…

大数据学习03-Hive分布式集群部部署

系统环境&#xff1a;centos7 软件版本&#xff1a;jdk1.8、zookeeper3.4.8、hadoop2.8.5、hive1.1.0 一、下载安装 下载hive安装包&#xff0c;上传到linux服务器上&#xff0c; 解压安装包 tar -zxvf apache-hive-1.1.0-bin.tar.gz -C /home/local/重命名文件 mv apache-…

手机VPN的连接方法分享

1、首先在手机屏幕左右的滑动,找到手机的设置图标。 2、在打开的小米手机设置页面中点击“更多连接方式”的菜单项。 3、然后在打开的更多连接方式页面中点击VPN的菜单项。 4、在打开的VPN设置页面中点击“添加VPN”的按钮。 5、在打开的添加VPN的页面中输入VPN的信息后点击右…

Element-UI 实现动态增加多个不同类型的输入框并校验(双重v-for表单验证)

文章目录 前言定义表单格式表单渲染和验证扩展 前言 在做复杂的动态表单&#xff0c;实现业务动态变动&#xff0c;比如有一条需要动态添加的el-form-item中包含了多个输入框&#xff0c;并实现表单验证&#xff0c;但在element-ui组件库中给出的表单校验中没有这样的格式&…

简析三相电能预付费控制系统的设计与产品选型

摘要&#xff1a;介绍了一种电能预付费系统&#xff0c;主要用于三相动力用户。采用预付费控制器终端和电能表分离的方式&#xff0c;从原有电表读取相关数据用于比较&#xff0c;在尽量少改动原有接线的情况下安装预付费控制系统。采用安全性和稳定性高的RFID卡&#xff0c;数…

真正的理解WPF中的TemplatedParent

童鞋们在WPF中经常看到 TemplatedParent ,或者经常看到下面的用法: {Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content} 是不是看的一脸蒙圈? 先看官方文档: 意思是 和这个控件的 模板上的 父亲,如果这个控件不是模板创建的,那么这个值就…

Servlet 会话跟踪基础

文章目录 前言Cookie实例Cookie缺点Cookie案例代码 SessionSession的创建与销毁Session的创建Session的销毁 Session和Cookie的区别不同联系 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 在Web应用程序中&#xff0c;会话跟踪是一种技术&#xff0c;…

vue+element-ui通用后台管理系统(适合新手)

vueelement-ui通用后台管理系统&#xff08;适合新手&#xff09; 1、使用到的技术 使用vue2element-uiaxiosjs-cookielessecharts实现的一个简易的通用后台管理系统&#xff0c;具有很强的可扩展性&#xff0c;修改简单&#xff0c;只要有点前端基础就能看懂&#xff1b; 2…

汇编 -20230718

一. 练习&#xff1a; 1. 1-100的和 .text .globl _start_start:mov r0, #0 存放结果mov r1, #0 存放当前数mov r2, #100 结束条件的数addFun:add r1, r1, #1add r0, r0, r1cmp r1, r2bne addFunstop:b stop.end结果展示&#xff1a;

将DAST集成到CI/CD管道中的优势和实施步骤

在当今快速发展的网络环境中&#xff0c;维护Web应用程序的安全更加必要。由于漏洞的出现速度比以往任何时候都要快&#xff0c;将动态应用程序安全测试&#xff08;DAST&#xff09;集成到持续集成/持续部署&#xff08;CI/CD&#xff09;管道中成为改变游戏规则的因素&#x…

uni-app:单位像素rpx

rpx:响应式单位&#xff0c;长宽可以随着屏幕大小改变&#xff0c;其尺寸根据iPhone 6的标准来参考&#xff08;750rpx为占满屏幕宽&#xff0c;1334rpx为占满屏幕长。7501334rpx&#xff09; 例子&#xff1a; 现在展示型号为iPhone 12 pro的型号&#xff0c;这里750px和750…

利用大模型进行法律判决预测

概述 本文研究背景是法律专业人员常用的演绎推理方法&#xff0c;即法律演绎&#xff0c;用于案例分析。 过去的方法主要是通过学习、微调或示例来教授大型语言模型&#xff08;LLM&#xff09;进行法律判决预测。这些方法存在的问题是学习样本有限&#xff0c;解释性差。因此…

02 - 如何制定性能调优策略?

1、性能测试攻略 性能测试是提前发现性能瓶颈&#xff0c;保障系统性能稳定的必要措施。下面我先给你介绍两种常用的测试方法&#xff0c;帮助你从点到面地测试系统性能。 1.1、微基准性能测试 微基准性能测试可以精准定位到某个模块或者某个方法的性能问题&#xff0c;特别…

数仓-零基础小白到入土-学习路线

数仓-零基础小白到入土-学习路线 铺垫一下下讲在前面涉及基础技术栈&#xff1a;中级&#xff1a;全部掌握之后&#x1f446;&#xff1a;去刷面试题&#xff1a; 初级中级高级博主独家面试题&#xff1a;数仓名词&#xff1a;催更我戳戳个人主页&#xff1a;[up自己的网站](ht…

Kafka - 分区中各种偏移量的说明

文章目录 引子名词解释分区中各种偏移量的说明 引子 名词解释 Kafka是一个高性能、高吞吐量的分布式消息系统&#xff0c;被广泛应用于大数据领域。在Kafka中&#xff0c;分区是一个重要的概念&#xff0c;它可以将数据分发到不同的节点上&#xff0c;以实现负载均衡和高可用性…

【PHP面试题73】TCP和UDP的特点和区别是什么?

文章目录 一、前言二、TCP&#xff08;Transmission Control Protocol&#xff09;三、UDP&#xff08;User Datagram Protocol&#xff09;四、TCP和UDP的区别五、总结 一、前言 本文已收录于PHP全栈系列专栏&#xff1a;PHP面试专区。 计划将全覆盖PHP开发领域所有的面试题&a…