美文网首页
vue面试必会

vue面试必会

作者: 熬得萨菲 | 来源:发表于2020-02-06 19:59 被阅读0次

一、对于MVVM的理解?

MVVM是model-view-viewModel的缩写;
Model:代表数据模型,也可以在model中定义数据修改和操作的业务逻辑。
View: 代表UI组件,它负责将数据模型转化成UI展现出来。
ViewModel: 监听模型数据的改变和控制视图行为、处理用户交互,简单理解就是同步view和model的对象,连接Model和View。

在MVVM架构下,View和Model之间并没有直接的联系,而是通过ViewModel进行交互,Model和ViewModel之间的交互是双向的,因此View数据的变化会同步到Model中,而Model数据的变化也会立即反应到View上。

ViewModel通过双向数据绑定把View层和Model层连接了起来,而View和Model之间的同步工作完全是自动的,无需人为干涉,因此开发者只需要关注业务逻辑,不需要手动操作DOM,不需要关注数据状态的同步问题,复杂的数据状态维护完全由ViewModel来统一管理;

二、 Vue的生命周期

1.beforeCreate(创建前) :在数据观测和初始化事件还未开始;

2.created(创建后):完成数据观测,属性和方法的运算,初始化事件,$el属性还没有显示出来;

3.beforeMount(挂载前):在挂载前被调用,相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。注意此时还没有挂载html到页面上。

4.mountd(载入后):el被新创建的vm.$el替换,并挂载到实例上去之后调用。实例已完成一下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染到html页面上。此过程中进行ajax交互。

5.beforeUpdate(更新前):在数据更新前调用,发生在虚拟DOM重新渲染和打补丁之前。 可以在该钩子中进一步地更改状态,不会触发附加的重渲染过程。

6.updated(更新后):在由于数据更新导致的虚拟DOM重新渲染和打补丁之后调用。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器渲染期间不被调用。

7.beforeDestroy(销毁前):在实例销毁之前调用。实例完全可以用。

8.destroyed(销毁后):在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。 该钩子在服务器端渲染期间不被调用。

1.什么是Vue生命周期?

答:Vue实例从创建到销毁的过程,就是生命周期。 从开始创建 -> 初始化数据 -> 编译模板 -> 挂载DOM-渲染 -> 更新-渲染 -> 销毁等一系列过程,称之为VUE的生命周期。

2.vue生命周期的作用是什么?

答:它的生命周期中有多个钩子,让我们在控制整个Vue实例的过程中更容易形成好的逻辑。

3.Vue生命周期总共分为几个阶段?

答:他可以总共分为8个阶段:创造前后、载入前后、更新前后、销毁前后。

4.第一次页面加载会触发哪几个钩子?

答: beforeCreate,created,beforeMount,Mounted

5.DOM渲染在哪个周期中就已经完成?

答:在Mounted中就已经完成了。

三、 Vue实现双向数据绑定的原理:Object.defineProperty()

vue实现数据双向绑定主要是: 采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的getter,setter,在数据变动时发布消息给订阅者,触发相应监听回调。当把一个普通js对象传给Vue实例来作为它的data选项时,Vue将遍历它的属性,用Object.defineProperty将它们转化为getter/setter。用户看不到getter/setter,但是在内部它们让Vue追踪依赖,在属性被访问和修改时通知变化。

vue的数据双向绑定将MVVM作为数据绑定的入口,整合Observer,Compile和Watcher三者,通过Observer来监听自己的model的数据变化,通过Compile来解析编译模板指令({{}}),最终由Watcher搭起Observer和Compile之间的通信桥梁,达到数据变化 -> 视图更新; 视图交互变化(input) -> 数据model变更双向绑定效果。

js实现简单的双向绑定:
    <body>
    <div id="app">
    <input type="text" id="txt">
    <p id="show"></p>
</div>
</body>
<script type="text/javascript">
    var obj = {}
    Object.defineProperty(obj, 'txt', {
        get: function () {
            return obj
        },
        set: function (newValue) {
            document.getElementById('txt').value = newValue
            document.getElementById('show').innerHTML = newValue
        }
    })
    document.addEventListener('keyup', function (e) {
        obj.txt = e.target.value
    })
</script>

四、 Vue组件间的参数传递

1. 父组件与子组件传值
父组件给子组件传值:子组件通过props方法接收并规定数据;
子组件传给父组件:$emit方法传递参数;

2. 非父子组件之间的数据传递,兄弟组件传值
eventBus,就是创建一个事件中心,相当于中转站,可以用它来传递事件和接收事件。项目比较小时,用这个比较合适。(虽然也有不少人推荐直接使用VUEX,具体看需求)

五、 路由的实现: hash模式和history模式

1. hash模式:再浏览器中符号“#”,#以及#号后面的字符称之为hash,用window.location.hash读取;
特点:hash虽然在URL中,但不被包括在HTTP请求中;用来指导浏览器动作,对服务端安全无用,hash不会重加载页面。hash模式下,仅hash符号之前的内容会被包含在请求中,如http://www.xxx.com。因此对于后端来说,即使没有做到对路由的全覆盖,也不会返回404错误。

2.history模式:history采用H5新特性;且提供了两个新方法: pushState() , replaceState() 可以对浏览器历史记录栈进行修改,以及popState事件的监听到状态变更

VUE路由的钩子函数

首页可以控制导航跳转,beforEach,afterEach等,一般用于页面的title修改。一些需要登录才能调整页面的重定向功能。
beforeEach主要有3个参数to,from,next
to:route即将进入的目标路由对象,
from:route当前当行正要离开的路由
next:function 一定要调用该方法resolve这个钩子。执行效果依赖next方法的调用参数。可以控制页面的跳转。

Vuex是什么?怎么使用?那种功能场景使用它?

vuex:只用来读取的状态放在store中;改变状态的方式是提交mutaions,这是个同步的食物; 异步逻辑应该封装在action中。
使用:在main.js引入store,注入。
state:存放的数据状态,不可以直接修改里面的数据。
mutations:定义的方法动态修改vuex的store中的状态或数据。
getters:类似vue中的计算属性,主要用来过滤一些数据
action: 异步处理数据的方法。 view层通过store.dispath来分发action。
modules:项目特别复杂的时候,可以让每一个模块拥有自己的state、mutation....,使得结构非常清晰,方便管理。
场景有:单页应用中,组件之间的状态、音乐播放、登录状态、加入购物车

对keep-alive的了解?

keep-alive是vue内置的一个组件,可以是被包含的组件保留状态,或避免重新渲染。

相关文章

  • vue面试必会

    一、对于MVVM的理解? 二、 Vue的生命周期 1.什么是Vue生命周期? 2.vue生命周期的作用是什么? 3...

  • vue必会面试题+答案

    vue必会面试题+答案 vue视频教程系列: 腾讯Vue实战问卷网站视频教程 完整教程目录:点击查看[https:...

  • 面试必会算法

    冒泡排序(Bubble Sort) 核心思想: 相邻元素两两比较,大的往后放,第一次比较完毕后,最大值出现在最大索...

  • 面试必会2

    观察者模式与发布/订阅模式区别: 从两张图片可以看到,最大的区别是调度的地方。虽然两种模式都存在订阅者和发布者(具...

  • vue面试题+答案,2021前端面试

    vue面试题+答案,2021前端面试 vue视频教程系列: Vue3+ElementPlus+Koa2 全栈开发后...

  • Android面试经典文章收集

    1.鸿洋大神Android 中高级面试必知必会

  • 各种资料地址

    1、面试必会之HashMap源码分析 https://m.toutiaocdn.cn/a6664469850049...

  • 面试前的总结-vue篇

    总结一些vue的面试题吧,为了年后的面试作准备。 vue指令 vue的生命周期 computed 和watch的区...

  • 前端面试资料收集

    vue相关知识 前端面试题+前端学习+面试指南 剖析Vue原理&实现双向绑定MVVM 详解 JavaScript的...

  • 「Java面试必会」ThreadPoolExecutor

    多线程,无论是工作中还是面试中,都会经常提到,这是一个Java中一个必会的知识点。JDK1.5以后,提供了Thre...

网友评论

      本文标题:vue面试必会

      本文链接:https://www.haomeiwen.com/subject/oqnuxhtx.html