zoukankan      html  css  js  c++  java
  • Vue面试中经常会被问到的面试题

    一.对于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,不需要关注数据状态的同步问题,复杂的数据状态维护完全由MVVM来统一管理。

     

    二.Vue的生命周期

    注意是生命周期,不是声明周期。

    下面列出了所有生命周期钩子的函数名:

    - beforeCreate

    - created

    - beforeMount

    - mounted

    - beforeUpdate

    - updated

    - beforeDestroy

    - destroyed

    - activated

    - deactivated

    - errorCaptured

    beforeCreate (创建前) 在数据观测和初始化事件还未开始 created (创建后) 完成数据观测, 属性和方法的运算, 初始化事件, el替换,

    并挂载到实例上去之后调用。 实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。

    完成模板中的html渲染到html页面中。 此过程中进行ajax交互。

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

    updated(更新后)在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间

    更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。

     

    beforeDestroy(销毁前)在实例销毁之前调用。实例仍然完全可用。

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

    1.什么是vue生命周期?

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

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

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

    3.vue生命周期总共有几个阶段?

    答:它可以总共分为8个阶段:创建前/后,载入前/后,更新前/后,销毁前/销毁后。

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

    答:会触发下面这几个 beforeCreate,created,beforeMount,mounted。

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

    答:DOM渲染在mounted中就已经完成了。

    三.Vue实现数据双向绑定的原理。

    Object.defineProperty()

    vue实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter, getter,在数据变动时发

    布消息给订阅者,触发相应监听回调。当把一个普通Javascript对象传给Vue实例来作为它的data选项时,Vue将遍历它的属性,用Object.defineProperty将

    它们转为getter/setter。用户看不到getter/setter,但是在内部它们让Vue追踪依赖,在属性被访问和修改时通知变化。

    vue的数据双向绑定将MVVM作为数据绑定的入口,整合Observer,Compile和Watcher三者,通过Observer来监听自己的model的数据变化,通过Compile来

    解析编译模板指令(vue中是用来解析{{}}),最终利用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,具体来说看需求咯。技术只是手段,目的达到才是王道。)

    六.Vue的路由实现

    hash模式和history模式

    hash模式:在浏览器中符号"#",#以及#后面的字符称之为hash,用window.location.hash读取;

    特点:hash虽然在URL中,但不被包括在HTTP请求中;用来指导浏览器动作,对服务端安全无用,hash不会重加载页面。

    hash模式下,仅hash符号之前的内容会被包含在请求中,如www.xxx.com,

    七.Vue与Angular、React的区别

    八.一句话能回答的问题

    1.css只在当前组件起作用

    答:

    2.v-if和v-show的区别

    答:v-if按照条件是否渲染,v-show是display的block或none;

    3.router的作用

    答:router是"路由实例"对象包括了路由的跳转方法,钩子函数等。

    4.vue.js的两个核心是什么?

    答:数据驱动、组件系统

    5.vue几种常用的指令

    答:v-for、v-if、v-bind、v-on、v-show、v-else

    6.vue常用的修饰符?

    答:.prevent:提交事件不再重载页面;

     

  • 相关阅读:
    檢查 cpu 的全部 gpio 狀態及設定
    device tree 負值 property 寫法
    shell script timer and 無限迴圈
    vim 搜尋取代功能
    英国人是这样“造”单词的
    计划时间程序
    程序猿的崛起,一篇文章看懂编程语言
    如何读懂计算机(二进制)
    为什么计算机上能看到动人的图片,精彩的视频和悦耳的音乐?(二进制)
    格式化时间用了YYYY-MM-dd,元旦当天老板喊我回去改Bug!(转载)
  • 原文地址:https://www.cnblogs.com/still1/p/10725993.html
Copyright © 2011-2022 走看看