面试学习准备

embedded/2024/11/27 22:11:01/

根据面试题web前端面试 - 面试官系列 里面的题目学习巩固。

1.vue2

组件通信

EventBus:
讲解

全局事件总线,核心思想是通过发布-订阅模式来实现组件之间的通信

在 Vue 2 中,可以直接使用 Vue 实例作为 EventBus。

使用方法:在mian.js中直接挂载到vue原型上。

const bus = new Vue();

Vue.prototype.$bus = bus

然后组件通过 this.$bus来访问

用$emit发送事件
this.$bus.$emit('customEvent', { message: 'Hello from Component A' });
用$on接收事件
this.$bus.$on('customEvent', (payload) => {
  console.log('Received:', payload.message);
});

项目中的真实用法:

项目顶部导航栏 点击模块高亮效果

1.//比如:在有导航栏的页面点击导航栏的首页 (页面路径:src\pages\home\index.vue)
methods:{
this.$router.push({name: "newIndex"
});
}2.//跳转到index首页页面 (页面路径:src\pages\home\newIndex.vue)
beforeMount() {this.$root.Bus.$emit("changeTab", 'first');
},
在这个页面中用$bus.$emit传递数据给导航栏页面3.还是导航栏页面接收参数(页面路径:src\pages\home\index.vue)
mounted(){
this.$root.Bus.$on("changeTab", e => {this.activeName = e; //this.activeName 控制导航栏文字是否高亮localStorage.setItem('activeName', e) //此时e就是上面传递的'first'
});
}

 NextTick

Vue 中 DOM 更新是异步的,数据更新后页面的 DOM 可能还没完成更新,因此在需要操作最新 DOM 时,可以使用 this.$nextTick 确保数据变化引起的 DOM 更新完成后再执行代码。

this.$nextTick 的使用场景主要是需要操作更新后的 DOM,而不仅仅是简单的页面渲染。简单的数据绑定渲染,Vue 会自动处理好,根本不需要用到 nextTick。只有当数据变化后,你有一些额外的逻辑需要依赖最新的 DOM 状态,才需要使用它。

所以,nextTick 本质上是为了解决数据变化和 DOM 更新之间的异步关系,确保操作发生在 DOM 更新完成之后,而不是专门为页面渲染而存在。

插槽slot

插槽重点 :父组件向子组件传递内容

分类        :

1.默认插槽  <slot></slot> 用于插入父组件的内容

2.具名插槽 (多个插槽) 通过 name 属性指定内容插入的位置,父组件用 #插槽名 提供内容。

3.作用域插槽 :(父组件还能拿到子组件提供的数据)子组件通过插槽把数据传递给父组件,父组件用 v-slot 接收数据。

 father.vue
<template><div><!-- 默认插槽 --><child><div>我是父组件给你传递的数据:父亲</div></child><!-- 具名插槽 --><child><template #name>我是具名插槽name</template><template #age>我是具名插槽age</template></child><!-- 作用域插槽  父组件用v-solt 接收子组件传递过来的数据 --><child v-solt="{info}"><div>父组件展示子组件的数据:{{ info }}</div></child></div>
</template><script>
import child from "./child";
<template><div><!-- 默认插槽 --><slot></slot><!-- 具名插槽 --><div><span>姓名:</span><slot name="name"></slot></div><div><span>年龄:</span><slot name="age"></slot></div><!-- 作用域插槽  子组件传递给父组件的数据 --><slot :info="info"></slot></div>
</template><script>
export default {name:'', components: {},data () {return {info:'我是子组件传递给父组件的数据 作用域插槽'}

axios封装

安装 和 导入

npm install axios --s 

在main.js中

import axios form ‘axios’

 发送请求
axios({        url:'xxx',    // 设置请求的地址method:"GET", // 设置请求方法params:{      // get请求使用params进行参数凭借,如果是post请求用datatype: '',page: 1}
}).then(res => {  // res为后端返回的数据console.log(res);   
})
二次封装 

原因:设置超时时间、设置请求头、错误处理等等操作

2.javascript中es6

为了在面试中能讲出多条,减少遗漏,下面只列举不解释。

1. 块级作用域(let和const)

2. 箭头函数

3. 解构赋值

4. 模板字符串

5. 类(Class)

6. Promise

7. 模块化导入和导出

8.async 和await

3.JavaScript 

1.数据类型

基本数据类型和引用数据类型 

区别:存储的位置不同

基本数据类型:String Number Undefined Null Boolean Symbol 

提示:

Undefined:声明了变量但是没赋值

Null 如果用typeof来判断是object类型

引用数据类型:Array Function Object

 2.数组的方法

感觉每次面试都会被用到,挺常见的

1.操作方法

  增删改查 

增:

  1.  push()  //添加到数组末尾
  2. unshift() // 添加在数组开头 这俩返回的都是数组长度
  3. splice  //接收三个参数 开始位置、 0(要删除的元素数量)、插入的元素。返回一个空数组   这三个都不会改变原数组
  4.    concat()返回新数组 let  oldArray = [1,2,3]    let newArray = oldArray.concat(4,6,7)  console.log(newArray)//1,2,3,4,6,7

删:

  1. pop()用于删除数组的最后一项,同时减少数组的length 值,返回被删除的项
  2. shift()用于删除数组的第一项,同时减少数组的length 值,返回被删除的项
  3. splice()传入两个参数,分别是开始位置,删除元素的数量,返回包含删除元素的数组
  4. slice()

  1. indexOf()查找的元素在数组中的位置,如果没找到则返回 -1
  2. inclueds()查找的元素在数组中的位置,找到返回true,否则false
  3. find()返回第一个匹配的元素

2.排序方法
  1. reverse()反转
  2. sort()比较函数。判断那个值应该排前面
3.转换方法

join()//把数组用符号隔开

let colors = ["red", "green", "blue"];
alert(colors.join(",")); // red,green,blue
4.迭代方法
  1. some()
  2. every()
  3. forEach()
  4. filter()
  5. map()

3. 防抖函数 debounce

 手写防抖函数

​function debounce(delay,fn){let timer = nullreturn function(...args){if(timer !== null){clearTimeout(timer)}timer = setTimeout(()=>{fn.apply(this,args)},delay)}}​


http://www.ppmy.cn/embedded/141016.html

相关文章

C++设计模式-策略模式-StrategyMethod

动机&#xff08;Motivation&#xff09; 在软件构建过程中&#xff0c;某些对象使用的算法可能多种多样&#xff0c;经常改变&#xff0c;如果将这些算法都编码到对象中&#xff0c;将会使对象变得异常复杂&#xff1b;而且有时候支持不使用的算法也是一个性能负担。 如何在运…

UE4 iOS Package的过程与XCode工程中没有游戏Content的原因

疑问 我观察XCode工程时&#xff0c;没有看到包含游戏Content或Content的Pak&#xff0c;为此研究代码 Package流程示意图 下面是若干步骤的解释&#xff1a; &#xff08;40&#xff09;日志见&#xff1a; 文档&#xff1a;子页&#xff1a; IOSPlatform.PrepForUATPackag…

8K超高清相机+双光谱融合技术

8K超高清相机 双光谱融合技术

C语言超详细教程

系列文章目录 文章目录 系列文章目录1 运算符1.1 算术运算符:2 控制语句2.1 条件语句:2.2 循环语句:3 函数3.1 函数的定义与声明:3.2 递归函数:4 指针4.1 指针的定义与使用函数指针:5. 数组与字符串5.1 数组一维数组:相同类型元素的集合(如:多维数组:数组的数组(如:…

Linux——基础命令(1)

目录 一、认识Linux 终端命令格式 查阅命令帮助信息 -help 辅助操作 自动补全 清屏和查看当前工作目录 二、基本命令 文件和目录常用命令 1.ls-查看文件与目录 2.cd切换目录 &#xff08;1&#xff09;touc创建文件或修改文件时间 &#xff08;2&#xff09;mkdir创…

《剖析 Spring 原理:深入源码的旅程(一)》

一、Spring 工作原理概述 Spring 是一个全面的企业应用开发解决方案&#xff0c;它通过控制反转&#xff08;IOC&#xff09;和面向切面编程&#xff08;AOP&#xff09;等技术&#xff0c;实现了轻量级、灵活的开发模式。Spring 框架由多个模块组成&#xff0c;包括核心容器、…

利用DeepFlow解决APISIX故障诊断中的方向偏差问题

概要&#xff1a;随着APISIX作为IT应用系统入口的普及&#xff0c;其故障定位能力的不足导致了在业务故障诊断中&#xff0c;APISIX常常成为首要的“嫌疑对象”。这不仅导致了“兴师动众”式的资源投入&#xff0c;还可能使诊断方向“背道而驰”&#xff0c;从而导致业务故障“…

0 基础 入门简单 linux操作 上篇 利用apt命令装13 linux搭建自己的服务器

前言 目前web网站大多数都是以linux服务器为主 &#xff0c; 还有就是kali工具都是 linux 所以说这个Linux很重要呀 前期准备 &#xff1a; 为了方便我建议直接去阿里白嫖 1年 新人云服务器 然后就是一个远程连接软件&#xff08;这里建议使用 finnalshell 或者Xs…