1.使用过css预处理么?喜欢哪个?
2.vue生命周期
生命周期钩子 | 详细 |
---|---|
beforeCreate | 在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。 |
created | 实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算, watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。 |
beforeMount | 在挂载开始之前被调用:相关的 render 函数首次被调用。 |
mounted | el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。如果 root 实例挂载了一个文档内元素,当 mounted 被调用时 vm.$el 也在文档内。 |
beforeUpdate | 数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。 |
updated | 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。 |
activated | keep-alive 组件激活时调用。 |
deactivated | keep-alive 组件停用时调用。 |
beforeDestroy | 实例销毁之前调用。在这一步,实例仍然完全可用。 |
destroyed | Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。 |
3.vue虚拟dom实现方法
为什么使用虚拟dom:
因为dom很慢,元素非常庞大,如果直接对dom进行操作复杂度高,兼容度差。各种MVVM双向数据绑定框架为我们解决了这一问题。但如果有复杂的场景下,过多的时间绑定会影响性能,虚拟dom可以改善这一点。运用虚拟dom既可以提高开发效率,又可以最小化dom操作,提高执行效率。
虚拟dom实现:
由于dom引擎处理较慢,js引擎处理较快,所以用js引擎来虚拟创建所有节点最后再render出来效率更高,并且在渲染之前先用diff方法再虚拟dom中计算出真实dom所需要的最小修改量,最后再对真实dom进行修改,以此达到效率最大化。
4.vue双向数据绑定
脏值检查,发布者-订阅者模式,数据劫持
脏值检测是angular.js使用的,会在指定事件触发之后进入脏值检测,检测数据是否变动
发布者-订阅者模式会给通过sub和pub给数据和视图绑定监听,用vm.set('property',value)
vue.js是结合发布者-订阅者模式还有数据劫持,通过defineProperty来劫持属性的setter和getter,在数据变动的时候发布消息给订阅者来触发相应地回调函数。
实现observer->实现compile->实现watcher->实现MVVM
在observer中用defineProperty来监听属性变动,对数据进行深度递归遍历,所有对象的属性都加上setter和getter,这样对象中的任何属性改变都会触发setter属性,我们就监听到了数据变化。
compile用于解析模版指令,将模版中的属性替换成数据,然后初始化渲染视图,并添加监听数据的订阅者。
watcher是compile和observer中间的媒介,在自身实例化的时候向dep(订阅者)中添加自己,并在watcher中添加一个update()函数,当属性变动dep.notice()触发的时候,调用自身update()属性,触发compile()总绑定的回调。
实现MVVM是整合了三者,挟持了vm实例化对象的读写权,通过observer来监听modal变化,通过compile来解析编译模版指令,在用watcher作为桥梁连接两者来实现,数据变化->视图更新,视图交互变化(input)->数据modal更新
5.http协议,无状态
https://www.cnblogs.com/ranyonsue/p/5984001.html
6.网络,cros如何实现跨域
7.原型,作用域链
8.虚拟dom的diff原理