Vue 面试题整理-2020 (2)

1、swiper 插件从后台获取数据没有问题,css 代码啥的也没有问题,但是图片没动,怎么解决.。
  主要是因为 swiper 提前初始化了 ,但是数据还没有完全出来。
  this.$nextTick() 主要作用就是等数据改变引发 DOM 重新渲染完成之后才会执行。
2、keep-alive
  当在这些组件之间切换的时候,想保持这么组建的状态,以避免反复渲染导致的性能问题
  原理:在 created 的时候,将需要缓存的虚拟 DOM 节点放到 cache 中,在 reader 的时候根据 name 再进行取出。
  路由懒加载:
    就是当你需要的时候才会加载,按需加载。
    单页面应用的问题就是所有的页面都需要引入一个 js 文件,wepback 打包的时候生成一个 js ,这个 js 会再所有组件切换的时候调用
    单页引入了所有的一个 js ,日志也会引入所有的一个 js ,这样首页加载速度变慢。解决方法就是路由懒加载。
3、单页应用
  原理就是通过检测地址栏的变化将对应路由组件进行组件之间的切换。
  一个项目只有一个完整的 html 页面,其他部分都是 html 组件组成,页面的跳转只是局部的刷新,不会重新加载全部的资源,组件之间的之间的切换快,比较容易实现转场动画。页面每次跳转时候,并不需要做 html 文件请求,这样就节约了很多 http 发送请求,我们的切换页面的时候,速度会很快。
  优点:良好的交互体验、良好的前后端工作分离模式、减轻服务器的压力、公用一套后端程序代码
  缺点:SEO 难度较大、页面上不能进行前进后退管理、初次加载耗时多。
4、什么是vue-loader?
  vue-loder 就是一个加载器,把 vue 组件转换成 js 模式。
  为什么要转译此模块?
    可以动态的渲染一些数据,对三个标签做了优化
    template 写虚拟 DOM
    script 写 es6 语法
    style 默认可以用 scss 语法,提供了作用域
    并且开发阶段提供了热加载器
5、slot 是什么?如何使用?
  插槽:具名插槽、匿名插槽、作用域插槽
  在引用子组件开始标签和结束标签之间,插入一个任意一个元素,用 slot 标签包裹一下,在父组件调用子组件的时候,这个插槽就会插入到子组件对应的具名插槽的位置。slot 有一个 name 属性,加 name 属性就是具名插槽,不加就是匿名插槽。
6、什么是虚拟 DOM ?与 key 值得关系?
  DOM 是用 js 对象记录一个 dom 节点得副本,当 dom 发生更改的时候,先用虚拟 dom 进行 diff 算法,算出最小差异,然后再修改真实 dom。
  当用传统得方式操作 DOM 得时候,浏览器会从构建 DOM 树开始从头到尾执行一边流程,效率很低,而虚拟 DOM 是用 javascrit 对象表示的,而操作 javascriot 是很简便高效的。虚拟 dom 和真实的 dom 有一层映射关系,很多需要操作 dom 的地方都会去操作虚拟 dom ,最后一次更新 dom,因而可以提高性能。
  虚拟 dom 的缺点:
  1、代码更多,体积更大
  2、内存占用增大
  3、小量的单一的 DOM 修改使用 虚拟 DOM 成本反而更高,不如直接修改真实 dom 快
7、如何理解 vue 的 mvvm 框架?
  是一种简化用户界面的事件驱动编程方程式。
  view 层是视图层,使用户交互层,主要是 HTML 和 CSS 来构建
  moedl 层数据模型层,泛指后端进行的各种逻辑处理和数据操控
  viewmodel 层是指视图数据层。在这一层,前端开发者对从后端获取的 model 数据进行转换处理,做二次封装,以生成符合 view 层使用预期的视图数据模型。
  数据双向绑定:
    当视图改变更新模型层,当模型层改变更新视图
  vue 的数据双向绑定:
    vue 采用数据劫持&订阅者发布模式的方法:vue 在创建 vm 的时候,会将数配置在实例中,然后会使用 object.defineproperty 对这些数据进行处理,并且会将数据进行处理,并且会为这些数据添加 getter 与 setter 方法,当数据改变之后,就会触发数据的 setter 方法,从而触发 vm 的 watcher 方法,然后数据改变了, vm 进一步渲染 view 视图。
8、active-class 是哪个组件的属性。
  vue-router 模块提供的 router-link 组件的属性
  在 vue-router 中要使用 active-class 有两种方式
    1、直接在路由 js 文件中配置 linkActiveClass
    2、在 router-link 中写入 active-class
9、scss 是什么?
  scss 是一种预编译器。
10、vue 的第三方插件:
  miui-ui element-ui vuex
11、axios 是什么?
  axios 是用来发送请求的。get 和 post 两种
  get:通过定义一个 get 函数,他有两个参数,第一个参数就表示我们请求的 url 地址,第二个参数就是我们要携带的请求参数,get 函数返回的是一个 promise 对象,当axios 请求成功的时候服务器返回给我们的是 reslove 返回值,请求错误的时候返回给我们的是 reject 错误值,最后通过 export 抛出 get 函数
  post:方法基本与 get 方法一致,但是需要设置请求头。
12、promise 的了解
  promise 是异步函数的解决方案,从语法上讲 promise 是一个对象,从他可以获取异步操作的消息, promise 有三个状态,pending 等待状态、fulfilled 成功状态、rejected 失败状态,状态一旦更改,就不会在变,创造出 promise 实例后,他会立刻执行,promise 有两个API 方法:resolve 和 reject,resolve 代表的是回调成功后的函数,reject 代表的是失败后返回的结果,原型上有两个放法:.then 和 .catch 方法,例如请求接口 .then 拿到的是数据,通过 .catch 捕获错误异常
13、自定义指令的方法:
  vue.directive
  钩子:bind、inserted、update、unbind
  参数:el、binding、vnode
14、vue 之间的通信
  父子:子组件用 props,接受父组件传递过来的值
  子父:父组件生命一条数据,再写一个改变自身的方法,传递给子组件,然后把子组件添加到点击事件上
  兄弟之间传值:
    ref 链:父组件要给子组件传值,在子组件上定义一个 ref 属性,这样通过父组件的 r e f s 属 性 就 可 以 获 取 子 组 件 的 值 了 , 也 可 以 进 行 父 子 , 兄 弟 之 间 的 传 值         e v e n . b u s 事 件 总 线 : 简 单 的 场 景 下 , 使 用 一 个 空 的 V U E 实 例 作 为 事 件 总 线 , 可 以 实 现 兄 弟 之 间 的 通 信 。 ∗ ∗ 15 、 异 步 函 数 ∗ ∗     a s y n c     a w a i t     a s y n c 函 数 的 返 回 值 是 一 个 P r o m i s e 对 象 。 当 这 个 a s y n c 函 数 返 回 一 个 值 时 , P r o m i s e 的 r e s o l v e 方 法 会 负 责 传 递 这 个 值 ( 相 当 于 P r o m i s e . r e s o l v e ( v a l u e ) ) ; 当 a s y n c 函 数 抛 出 异 常 时 , P r o m i s e 的 r e j e c t 方 法 也 会 传 递 这 个 异 常 值 ( 相 当 于 P r o m i s e . r e j e c t ( v a l u e ) ) 。     a s y n c 函 数 中 可 能 会 有 a w a i t 表 达 式 , a w a i t 表 达 式 会 暂 停 当 前 a s y n c f u n c t i o n 的 执 行 , 等 待 P r o m i s e 处 理 完 成 。 若 P r o m i s e 正 常 处 理 ( f u l f i l l e d ) , 其 处 理 结 果 作 为 a w a i t 表 达 式 的 值 , 继 续 执 行 a s y n c f u n c t i o n ∗ ∗ 16 、 V U E 路 由 之 间 的 传 值 ∗ ∗     使 用 refs 属性就可以获取子组件的值了,也可以进行父子,兄弟之间的传值     even.bus 事件总线:简单的场景下,使用一个 空的 VUE 实例作为事件总线,可以实现兄弟之间的通信。 **15、异步函数**   async  await   async 函数的返回值是一个 Promise 对象。当这个 async 函数返回一个值时,Promise的 resolve 方法会负责传递这个值(相当于Promise.resolve(value));当 async 函数抛出异常时,Promise 的 reject 方法也会传递这个异常值(相当于Promise.reject(value))。   async 函数中可能会有 await 表达式,await 表达式会暂停当前 async function 的执行,等待 Promise 处理完成。若 Promise 正常处理(fulfilled),其处理结果作为 await 表达式的值,继续执行 async function **16、VUE 路由之间的传值**   使用 refs    even.bus线使VUE线15  async  await  asyncPromiseasyncPromiseresolvePromise.resolve(value)asyncPromiserejectPromise.reject(value)  asyncawaitawaitasyncfunctionPromisePromise(fulfilled)awaitasyncfunction16VUE  使router.push 拼接参数传参
  使用name来确定匹配的路由,通过params来传递参数
  使用path来匹配路由,然后通过query来传递参数
17、模块化开发
  一个模块就是实现特定功能的文件
好处:
    1、避免了变量污染,命名冲突
    2、提高代码复用率
    3、提高维护性
    4、依赖关系的管理
18、vue 的计算属性
  在模板中放入太多的逻辑会让模板过重且难以维护,在需要对数据进行复杂处理,且可能多次使用的情况下,尽量采用计算属性的方法
好处
    1、是数据处理结构清晰
    2、依赖于数据,数据更新,处理结果自动更新,
    3、计算属性内部 this 指向vm实例
    4、在 template 调用时,直接写计算属性姓名即可
    5、常用的是 getter 方法,获取数据,也可以使用 set方法改变数据,
    6、相较于methods,不管依赖的数据变不变,methods都会重新计算,但是依赖数据不变的时候conputed从缓存中获取,不会重新计算,

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值