🔥系列专栏:面试宝典 🎉欢迎关注👀点赞👍收藏⭐留言📝 🥇个人主页:hacker_demo的51CTO博客 💬个人格言:不断的翻越一座又一座的高山,那样的人生才是我想要的。这一马平川,一眼见底的活,我不想要,我的人生,我自己书写,余生很长,请多关照,我的人生,敬请期待💖💖💖

6cca30376d389080e4ff9ba305ce12a3.jpeg

(Vue面试题)

谈谈你对Vue的理解

1.它是一个渐进式JavaScript框架 2.核心库加插件 3.动态创建用户界面 4.使用MVVM模式 5.代码简洁 体积小 能够提高运行效率 6.适合PC端和移动端的开发 7.可以轻松引入vue插件以及其他第三方库进行开发

Vue的常用指令

==v-text== v-text 主要用来更新 textContent,可以等同于 JS 的 text 属性。 ==v-html== 等同于 JS 的 innerHtml 属性 ==v-cloak== 用来保持在元素上直到关联实例结束时进行编译 解决闪烁问题 ==v-once== v-once 关联的实例,只会渲染一次。之后的重新渲染,实例极其所有的子节点将被视为静态内容跳过,这可以用于优化更新性能 ==v-if== v-if 可以实现条件渲染,Vue 会根据表达式的值的真假条件来渲染元素 ==v-else== v-else 是搭配 v-if 使用的,它必须紧跟在 v-if 或者 v-else-if 后面,否则不起作用 ==v-else-if== v-else-if 充当 v-if 的 else-if 块, 可以链式的使用多次。可以更加方便的实现 switch 语句。 ==v-show== 也是用于根据条件展示元素。和 v-if 不同的是,如果 v-if 的值是 false,则这个元素被销毁,不在 dom 中。但是 v-show 的元素会始终被渲染并保存在 dom 中,它只是简单的切换 css 的 dispaly 属性 ==v-for== 用 v-for 指令根据遍历数组来进行渲染 ==v-bind== v-bind 用来动态的绑定一个或者多个特性。没有参数时,可以绑定到一个包含键值对的对象。常用于动态绑定 class 和 style。以及 href 等。简写为一个冒号【 :】 ==v-model== 用于在表单上创建双向数据绑定 ==v-on== v-on 主要用来监听 dom 事件,以便执行一些代码块。表达式可以是一个方法名。 简写为:【 @ 】

双向数据绑定原理

MVVM模式 MVVM模式就是Model–View–ViewModel模式。它实现了View的变动,自动反映在 ViewModel,反之亦然。就是在单向绑定的基础上给可输入元素(input、textare等)添加了change(input)事件,(change事件触发,View的状态就被更新了)来动态修改model。 ==双向绑定原理== vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的。 实现数据的双向绑定,首先要对数据进行劫持监听,所以我们需要设置一个监听器Observer,用来监听所有属性。如果属性发上变化了,就需要告诉订阅者Watcher看是否需要更新。因为订阅者是有很多个,所以我们需要有一个消息订阅器Dep来专门收集这些订阅者,然后在监听器Observer和订阅者Watcher之间进行统一管理的。接着,我们还需要有一个指令解析器Compile,对每个节点元素进行扫描和解析,将相关指令(如v-model,v-on)对应初始化成一个订阅者Watcher,并替换模板数据或者绑定相应的函数,此时当订阅者Watcher接收到相应属性的变化,就会执行对应的更新函数,从而更新视图。 总结成三个步骤 ==1==实现一个监听器Observer,用来劫持并监听所有属性,如果有变动的,就通知订阅者。 ==2==实现一个订阅者Watcher,每一个Watcher都绑定一个更新函数,watcher可以收到属性的变化通知并执行相应的函数,从而更新视图。 ==3==实现一个解析器Compile,可以扫描和解析每个节点的相关指令(v-model,v-on等指令),如果节点存在v-model,v-on等指令,则解析器Compile初始化这类节点的模板数据,使之可以显示在视图上,然后初始化相应的订阅者(Watcher)。