财政局网站建设自查报告,香河县住房和城乡建设部网站,建立企业网站的详细步骤,南通做网站的公司文章目录一、VUE前端常问面试题二、文档下载地址一、VUE前端常问面试题
1、MVC和MVVM 区别
MVC#xff1a;MVC全名是 Model View Controller#xff0c;即模型-视图-控制器的缩写#xff0c;一种软件设计典范。 Model(模型)#xff1a;是用于处理应用程序数据逻辑部分。通…
文章目录一、VUE前端常问面试题二、文档下载地址一、VUE前端常问面试题
1、MVC和MVVM 区别
MVCMVC全名是 Model View Controller即模型-视图-控制器的缩写一种软件设计典范。 Model(模型)是用于处理应用程序数据逻辑部分。通常模型对象负责在数据库中存取数据。 View(视图)是应用程序中处理数据显示的本分。通常视图是依据模型数据创建的。 Controller(控制器)是应用程序处理用户交互的部分。通常控制器负责从视图读取数据控制用户输入并向模型发送数据。
MVC的思想一句话描述就是Controller负责将Model的数据用View显示出来换句话说就是在Controller里面把Model的数据赋值给View。 MVVMMVVM新增了VM类。 ViewModel层做了两件事达到了数据的双向绑定一是将模型转化成视图即将后端传递的数据转化成所看到的页面。实现的方式是“数据绑定”。二是将视图转化成模型即将所看到的页面转换成后端的数据。实现的方式是“DOM事件监听”。
MVVM与MVC最大的区别就是实现了View和Model的自动同步也就是当Model的属性改变时我们不用再手动操作Dom元素来改变View的显示。 而是改变属性后该属性对应的View层显示会自动改变对应Vue数据驱动的思想整体看来MVVM比MVC精简很多不仅简化了业务与界面的依赖还解决了数据频繁更新的问题不用再用选择器操作DOM元素。因为在MVVM中View不知道Model的存在Model和ViewModel也察觉不到View这种低耦合模式提高代码的可重用性。
2、为什么data是一个函数
组件的data写成一个函数数据以函数返回值形式定义这样每复用一次组件就会返回一分新的data类似于给每个组件实例创建一个私有的数据空间让各个组件实例维护各自的数据。而单纯的写成对象形式就使得所有组件实例共用了一份data就会造成一个变了全都会变的结果。
3、Vue组件通讯有哪些方式
1props 和 emit。父组件向子组件传递数据是通过props传递的子组件传递给父组件是通过emit。父组件向子组件传递数据是通过props传递的子组件传递给父组件是通过emit。父组件向子组件传递数据是通过props传递的子组件传递给父组件是通过emit触发事件来做到的。 2$parent 和 children获取单签组件的父组件和当前组件的子组件。3children 获取单签组件的父组件和当前组件的子组件。 3children获取单签组件的父组件和当前组件的子组件。3attrs 和 listenersA−B−C。Vue2.4开始提供了listeners A - B - C。Vue2.4开始提供了listenersA−B−C。Vue2.4开始提供了attrs和listeners来解决这个问题。4父组件中通过provide来提供变量然后在子组件中通过inject来注入变量。官方不推荐在实际业务中适用但是写组件库时很常用。5listeners来解决这个问题。 4父组件中通过 provide 来提供变量然后在子组件中通过 inject 来注入变量。官方不推荐在实际业务中适用但是写组件库时很常用。 5listeners来解决这个问题。4父组件中通过provide来提供变量然后在子组件中通过inject来注入变量。官方不推荐在实际业务中适用但是写组件库时很常用。5refs 获取组件实例。 6envetBus 兄弟组件数据传递这种情况下可以使用事件总线的方式。 7vuex 状态管理。
4、Vue的生命周期方法有哪些一般在哪一步发送请求
beforeCreate在实例初始化之后数据观测data observe和event/watcher事件配置之前被调用。在当前阶段 data、methods、computed 以及watch上的数据和方法都不能被访问。 created实例已经创建完成之后被调用。在这一步实例已经完成以下的配置数据观测data observe 属性和方法的运算watch/event 事件回调。这里没有 el如果非要想与DOM进行交互可以通过vm.el如果非要想与 DOM 进行交互可以通过vm.el如果非要想与DOM进行交互可以通过vm.nextTick 来访问 DOM。 beforeMoun在挂载开始之前被调用相关的 render 函数首次被调用。 Mounted在挂载完成后发生在当前阶段真实的 Dom 挂载完毕数据完成双向绑定可以访问到 Dom节点。 beforeUpdate数据更新时调用发生在虚拟 DOM 重新渲染和打补丁 patch之前。可以在这个钩子中进一步地更改状态这不会触发附加的重渲染过程。 updated发生在更新完成之后当前阶段组件 Dom 已经完成更新。要注意的是避免在此期间更新数据因为这个可能导致无限循环的更新该钩子在服务器渲染期间不被调用。 beforeDestroy实例销毁之前调用。在这一步实力仍然完全可用。我们可以在这时进行 善后收尾工作比如清除定时器。 destroyVue实例销毁后调用。调用后Vue实例指示的东西都会解绑定所有的事件监听器会被移除左右的子实例也会被销毁该钩子在服务器端渲染不被调用。 Activatedkeep-alive专属组件被激活时调用。 Deactivatedkeep-alive专属组件被销毁时调用。 异步请求在哪一步发起 可以在钩子函数 created、beforeMount、mounted 中进行异步请求因为在这三个钩子函数中data已经创建可以将服务器端返回的数据进行赋值。 如果异步请求不需要依赖 DOM 推荐加载 created 钩子函数中调用异步请求因为在 created 钩子函数中调用异步请求有以下优点 能更快获取到服务端数据减少页面loading时间。ssr 不支持 beforeMount、mounted 钩子函数所以放在 created 中有助于一致性。
5、v-if 和 v-show 的区别
v-if 在编译过程中会被转化成三元表达式条件不满足时不渲染此节点。 v-show 会被编译成指令条件不满足时控制样式将此节点隐藏display:none 使用场景 v-if 适用于在运行时很少改变条件不需要频繁切换条件的场景。 v-show 适用于需要非常频繁切换条件的场景。
6、说说 vue 内置指令
v-once定义它的元素或组件只渲染一次包括元素或组件的所有节点首次渲染后不再随数据的变化重新渲染将被视为静态内容。 v-cloak这个指令保持在元素上直到关联实例结束编译 – 解决初始化慢到页面闪动的最佳实践。 v-bind绑定属性动态更新HTML元素上的属性。例如 v-bind:class。 v-on用于监听DOM事件。例如 v-on:click v-on:keyup v-html赋值就是变量的innerHTML – 注意防止xss攻击 v-text更新元素的textContent v-model在普通标签上变成value和input的语法糖并且会处理拼音输入法的问题。再组件上也是处理value和input语法糖。 v-if、 v-else、v-else-if可以配合template使用在render函数里面就是三元表达式。 v-show、使用指令来实现 – 最终会通过display来进行显示隐藏。 v-for、循环指令编译出来的结果是 -L 代表渲染列表。优先级比v-if高最好不要一起使用尽量使用计算属性去解决。注意增加唯一key值不要使用index作为key。 v-pre、跳过这个元素以及子元素的编译过程以此来加快整个项目的编译速度。
7、怎样理解 Vue 的单项数据流
数据总是从父组件传到子组件子组件没有权利修改父组件传过来的数据只能请求父组件对原始数据进行修改。这样会防止从子组件意外改变父组件的状态从而导致你的应用的数据流向难以理解。 注意在子组件直接用 v-model 绑定父组件传过来的 props 这样是不规范的写法开发环境会报警告。如果实在要改变父组件的 props 值可以再data里面定义一个变量并用 prop 的值初始化它之后用$emit 通知父组件去修改。
8、computed和watch的区别和运用的场景。
computed是计算属性依赖其它属性计算值并且 computed 的值有缓存当计算值变化才会返回内容他可以设置getter和setter。 watch监听到值的变化就会执行回调在回调中可以进行一系列的操作。 计算属性一般用在模板渲染中某个值是依赖其它响应对象甚至是计算属性而来而侦听属性适用于观测某个值的变化去完成一段复杂的业务逻辑。
9、v-if和 v-for为什么不建议一起使用
v-for和v-if不要在同一标签中使用因为解析时先解析v-for在解析v-if。如果遇到需要同时使用时可以考虑写成计算属性的方式。
10、Vue 2.0 响应式数据的原理
整体思路是数据劫持观察者模式。对象内部通过 defineReactive 方法使用 Object.defineProperty将属性进行劫持只会劫持已存在的属性数组则是通过重写数组来实现。当页面使用对应属性时每个属性都拥有自己的 dep 属性存在它所依赖的 watcher 依赖收集get当属性变化后会通知自己对应的 watcher 去更新派发更新set。
11、Vue如何检测数组变化
数组考虑性能原因没有用 defineProperty 对数组的每一项进行拦截而是选择对7种数组push,shift,pop,splice,unshift,sort,reverse方法进行重写AOP 切片思想。所以在 Vue 中修改数组的索引和长度无法监控到。需要通过以上7种变异方法修改数组才会触发数组对应的watcher进行更新。
12、Vue3.0 用过吗了解多少
响应式原理的改变 Vue3.x 使用 Proxy 取代 Vue2.x 版本的 Object.defineProperty。 组件选项声明方式 Vue3.x 使用 Composition API setup是Vue3.x新增的一个选项他是组件内使用Composition API 的入口。 模板语法变化slot具名插槽语法自定义指令v-model升级。 其他方面的更改 Suspense支持Fragment多个根节点和 Protal在dom其他部分渲染组件内容组件针对一些特殊的场景做了处理。基于 treeShaking 优化提供了更多的内置功能。
13、Vue3.0和2.0的响应式原理区别
Vue3.x改用Proxy替代Object.defineProperty。因为 Proxy 可以直接监听对象和数组的变化并且有多达13种拦截方法。 Vue的父子组件生命周期钩子函数执行顺序如下 加载渲染过程 父beforeCreate - 父created - 父beforeMount - 子beforeCreate - 子created - 子beforeMount - 子mounted - 父mounted 子组件更新过程 父beforeUpdate - 子beforeUpdate - 子updated - 父updated 父组件更新过程 父beforeUpdate - 父updated 销毁过程 父beforeDestroy - 子beforeDestroy - 子destroyed - 父destroyed
14、虚拟DOM是什么有什么优缺点
由于在浏览器中操作DOM是很昂贵的。频繁操作DOM会产生一定性能问题。这就是虚拟Dom的产生原因。Vue2的Virtual DOM借鉴了开源库snabbdom的实现。Virtual DOM本质就是用一个原生的JS对象去描述一个DOM节点是对真实DOM的一层抽象。 优点 1保证性能下限框架的虚拟DOM需要适配任何上层API可能产生的操作他的一些DOM操作的实现必须是普适的所以它的性能并不是最优的但是比起粗暴的DOM操作性能要好很多因此框架的虚拟DOM至少可以保证在你不需要手动优化的情况下依然可以提供还不错的性能既保证性能的下限。 2无需手动操作DOM我们不需手动去操作DOM只需要写好 View-Model的 代码逻辑框架会根据虚拟DOM和数据双向绑定帮我们以可预期的方式更新视图极大提高我们的开发效率。 3跨平台虚拟DOM本质上是JavaScript对象而DOM与平台强相关相比之下虚拟DOM可以进行更方便地跨平台操作例如服务器端渲染、weex开发等等。 缺点 1无法进行极致优化虽然虚拟DOM合理的优化足以应对大部分应用的性能需要但在一些性能要求极高的应用中虚拟DOM无法进行针对性的极致优化。 2首次渲染大量DOM时由于多了一层DOM计算会比innerHTML插入慢。
15、v-model原理
v-model 只是语法糖而已。v-model 在内部为不同的输入元素使用不同的 property 并抛出不同的事件。 text 和 textarea 元素使用 value property 和 input 事件 checkbox 和 radio 使用 checked property 和 change事件 select 字段将 value 作为 prop 并将 change 作为事件。 注意对于需要使用输入法的语言你会发现 v-model 不会在输入法组合文字过程中得到更新。
16、v-for为什么要加key
如果不使用keyVue会使用一种最大限度减少动态元素并且尽可能的尝试就地修改、复用相同类型元素的算法。key 是为Vue中Vnode的唯一标识通过这个key我们的diff操作可以更准确、更快速。 更准确因为带key就不是就地复用了在sameNode函数 a.key b.key 对比中可以避免就地复用的情况。所以更加准确。 更快速利用key的唯一性生成map对象来获取对应节点比遍历方式块。
17、Vue事件绑定原理
原生事件绑定是通过 addEventListener 绑定给真实元素的组件事件绑定是通过Vue自定义的$on实现的。如果要在组件上使用原生事件需要加.native修饰符这样就相当于在父组件中把子组件当做普通的HTML标签然后加上原生事件。 on、on、on、emit 是基于发布订阅模式的维护一个事件中心on的时候将事件按名称存在事件中心里称之为订阅者然后emit将对应的事件进行发布去执行事件中心里的对应的监听器。
18、vue-router路由钩子函数是什么执行顺序是什么
路由钩子的执行流程钩子函数种类有全局守卫、路由守卫、组件守卫。 完整的导航解析流程 1导航被触发。 2在失活的组件里调用 beforeRouterLeave 守卫。 3调用全局的 beforeEach 守卫。 4在重用的组件调用 beforeRouterUpdate 守卫2.2。 5在路由配置里面 beforeEnter。 6解析异步路由组件。 7在被激活的组件里调用 beforeRouterEnter。 8调用全局的 beforeResolve 守卫2.5。 9导航被确认。 10调用全局的 afterEach 钩子。 11触发 DOM 更新。 12调用 beforeRouterEnter 守卫中传给next的回调函数创建好的组件实例会作为回调函数的参数传入。
19、vue-router 动态路由是什么有什么问题。
我们经常需要把某种模式匹配到的所有路由全都映射到同个组件。例如我们有一个User组件对于所有ID各不相同的用户都要使用这个组件来渲染。那么我们可以在 vue-router 的路由路径中使用“动态路径参数”dynamic segment来达到这个效果。
20、谈一下对vuex 的个人理解
vuex 是专门为 vue 提供的全局状态管理系统用于多个组件中数据共享、数据缓存等。无法持久化、内部内心原理是通过创造一个全局实例 new Vue
主要包括以下几个模块 State:定义了应用状态的数据结构可以在这里设置默认的初始化状态。 Getter:允许组件从Store中获取数据mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性。 Mutation:是唯一更改 store 中状态的方法且必须是同步函数。 Action:用于提交 mutation而不是直接变更状态可以包含任意异步请求。 Module:允许将单一的 Store 拆分更多个 store 且同时保存在单一的状态树中。
21、Vuex页面刷新数据丢失怎么解决
需要做 vuex 数据持久化一般使用本地储存的方案来保存数据可以自己设计存储方案也可以使用第三方插件。推荐使用 vuex-persist (脯肉赛斯特)插件它是为 Vuex 持久化储存而生的一个插件。不需要你手动存取 storage而是直接将状态保存至 cookie 或者 localStorage中。
22、Vuex为什么要分模块并且加命名空间
模块由于使用单一状态树应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时store 对象就有可能会变得相当臃肿。为了解决以上问题Vuex 允许我们将 store 分割成模块module。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块。 命名空间 默认情况下模块内部的 action、mutation、getter是注册在全局命名空间的 — 这样使得多个模块能够对同一 mutation 或 action 做出响应。如果希望你的模块具有更高的封装度和复用性你可以通过添加 namespaced:true 的方式使其成为带命名的模块。当模块被注册后他所有 getter、action、及 mutation 都会自动根据模块注册的路径调整命名。
23、使用过Vue SSR 吗说说SSR。
SSR 也就是服务端渲染也就是将 Vue 在客户端把标签渲染成 HTML 的工作放在服务端完成然后再把 html 直接返回给客户端。 优点 SSR 有着更好的 SEO、并且首屏加载速度更快。 缺点开发条件会受限制服务器端渲染只支持 beforeCreate 和 created 两个钩子当我们需要一些外部扩展库时需要特殊处理服务端渲染应用程序也需要处Node.js 的运行环境。
24、vue 中使用了哪些设计模式
1工厂模式传入参数即可创建实例。虚拟 DOM 根据参数的不同返回基础标签的 Vnode 和组件 Vnode。 2单例模式整个程序有且仅有一个实例。vuex 和 vue-router 的插件注册方法 install 判断如果系统存在实例就直接返回掉。 3发布-订阅模式。vue 事件机制 4观察者模式。响应式数据原理 5装饰器模式装饰器的用法 6策略模式策略模式指对象有某个行为但是在不同的场景中该行为有不同的实现方案 - 比如选项的合并策略。
25、你都做过哪些Vue的性能优化
这里只列举针对Vue的性能优化整个项目的性能优化是一个大工程。 1对象层级不要过深否则性能就会差。 2不需要响应式的数据不要放在 data 中可以使用 Object.freeze() 冻结数据. 3v-if 和 v-show 区分使用场景。 4computed 和 watch 区分场景使用。 5v-for 遍历必须加 keykey最好是id值且避免同时使用 v-if。 6大数据列表和表格性能优化虚拟列表 / 虚拟表格。防止内部泄露组件销毁后把全局变量和时间销毁。 7图片懒加载、路由懒加载、异步路由。 8第三方插件的按需加载 9适当采用 keep-alive 缓存组件 10防抖、节流的运用 11服务端渲染 SSR or预渲染
26、Vue.mixin的使用场景和原理
在日常开发中我们经常会遇到在不同组件中经常用到一些相同或者相似的代码这些代码的功能相对独立可以通过vue 的 mixin 功能抽离公共的业务逻辑原理类似“对象的继承”当组件初始化时会调用 mergeOptions 方法进行合并采用策略模式针对不同的属性进行合并。当组件和混入对象含有相同名选项时这些选项将以恰当的方式进行“合并”。
27、nextTick 使用场景和原理
nextTick 中的回调是在下次 DOM 更新循环结束之后执行的延迟回调。在修改数据之后立即使用这个方法获取更新后的 DOM。主要思路就是采用微任务优先的方式调用异步方法去执行 nextTick 包装的方法。
28、keep-alive 使用场景和原理
keep-alive 是 Vue 内置的一个组件可以实现组件缓存当组件切换时不会对当前组件进行卸载。 常用的两个属性 include/exclude允许组件有条件的进行缓存。 两个生命周期 activated/deactivated用来得知当前组件是否处理活跃状态。 keep-alive 运用了 LRU 算法选择最近最久未使用的组件予以淘汰。
29、Vue.set方法原理
了解 Vue 响应式原理的同学都知道在两种情况下修改 Vue 是不会触发视图更新的。 1在实例创建之后添加新的属性到实例上给响应式对象新增属性。 2直接更改数组下标来修改数组的值。 Vue.set 或者说是$set原理如下 因为响应式数据 我们给对象和数组本身新增了__ob__属性代表的是 Observer 实例。当给对象新增不存在的属性首先会把新的属性进行响应式跟踪 然后会触发对象 ob 的dep收集到的 watcher 去更新当修改数组索引时我们调用数组本身的 splice 方法去更新数组。
30、Vue.extend 作用和原理
官方解释Vue.extend 使用基础 Vue 构造器创建一个“子类”。参数是一个包含组件选项的对象。 其实就是一个子类构造器是Vue组件的核心api。实现思路就是使用原型继承的方法返回了 vue 的子类并且利用 mergeOptions 把传入组件的 options 就和父类的 options 进行了合并。
31、写过自定义指令吗原理是什么
指令本质上是装饰器是 vue 对 HTML 元素的扩展给 HTML 元素添加自定义功能。vue 编译 DOM 时会找到指令对象执行指令的相关方法。 自定义指令有五个生命周期也叫钩子函数分别是 bind、inserted、update、componentUpdated、unbind 1bind只调用一次指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。 2inserted被绑定元素插入父节点时调用。 3update被绑定元素所在的模板更新时调用而不论绑定值是否变化。通过比较前后的绑定值。 4componentUpdated被绑定元素所在模板完成一次更新周期时调用。 5unbind只调用一次指令与元素解绑时调用。 原理 1在生成 ast 语法树时遇到指令会给当前元素添加 directives 属性 2通过 genDirectives 生成指令代码 3在 patch 前将指令的钩子提取到 cbs 中在 patch 过程中调用对应的钩子。 4当执行指令对应钩子函数时调用对应指令定义方法。
32、Vue 修饰符有哪些
事件修饰符 .stop 阻止事件继续传播。 .prevent 阻止标签默认行为。 .capture 使用事件捕获模式即元素自身触发的事件先在此处处理然后才交由内部元素进行处理。 .self 只当在 event.target 是当前元素自身时触发处理函数。 .once 事件只会触发一次。 .passive 告诉浏览器你不想阻止事件的默认行为。 v-model 的修饰符 .lazy 通过这个修饰符转变为在 change 事件再同步。 .number 自动将用户输入值转化为数值类型。 .trim 自动过滤用户输入的收尾空格。 键盘事件修饰符 .enter、.tab、.delete (捕获“删除”和“退格”键)、.esc、.space、.up、.down、.left、.right 系统修饰符: .ctrl、.alt、.shift、.meta 鼠标按钮修饰符 .left、.right、.middle
33、Vue模板编译原理
Vue 的编译过程就是将 template 转化为 render 函数的过程分为以下三步 第一步是将模板字符串转换成 element ASTs解析器。 第二步是对AST进行静态节点标记主要用来做虚拟 DOM 的渲染优化优化器。第三步是使用element ASTs 生成 render 函数代码字符串代码生成器
34、生命周期钩子是如何实现的
Vue 的生命周期钩子核心实现是利用发布订阅模式先把用户传入的生命周期钩子订阅好内部采用数组的方法存储然后在创建组件实例的过程中会一次执行对应的钩子方法。
35、函数式组件使用场景和原理
函数式组件与普通组件的区别 1函数式组件需要在声明组件时指定 functional:true 2不需要实例化所以没有thisthis通过render函数的第二个参数context代替 3没有生命周期钩子函数不能使用计算属性watch 4不能通过emit对外暴露事件调用事件只能通过context.listeners.click的方式调用外部传入的事件5因为函数组件时没有实例化的所以在外部通过ref去引用组件时实际引用的是HTMLElement6函数式组件的props可以不用显示声明所以没有在props里面声明的属性都会被自动隐式解析为prop而普通的组件所有未声明的属性都解析到emit对外暴露事件调用事件只能通过context.listeners.click的方式调用外部传入的事件 5因为函数组件时没有实例化的所以在外部通过ref去引用组件时实际引用的是HTMLElement 6函数式组件的props可以不用显示声明所以没有在props里面声明的属性都会被自动隐式解析为prop而普通的组件所有未声明的属性都解析到emit对外暴露事件调用事件只能通过context.listeners.click的方式调用外部传入的事件5因为函数组件时没有实例化的所以在外部通过ref去引用组件时实际引用的是HTMLElement6函数式组件的props可以不用显示声明所以没有在props里面声明的属性都会被自动隐式解析为prop而普通的组件所有未声明的属性都解析到attrs里面并自动挂载到组件根元素上可以通过inheritAttrs属性禁止 优点 1.由于函数组件不需要实例化无状态没有生命周期所以渲染性要好于普通组件。 2.函数组件结构比较简单代码结构更清晰
36、能说下vue-router中常用的路由模式和实现原理吗
hash 模式 1location.has 的值实际就是 URL 中 # 后面的东西。它的特点在于hash虽然出现 URL 中但不会被包含在 HTTP 请求中对后端完全没有影响因此改变 hash 不会重新加载页面。 2可以为hash的改变添加监听事件window.addEventListener(“hashchange”,funcRef,false) 每一次改变 hash (window.location.hash)都会在浏览器的访问历史中增加一个记录利用hash的以上特点就可以实现前端路由“更新视图但不重新请求页面”的功能了。兼容性好但是不美观。 history 模式 利用 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。这两个方法应用于浏览器的历史记录站在当前已有的 back、forward、go 的基础上他们提供了对历史记录进行修改的功能。这两个方法有个共同点当调用他们修改浏览器历史记录栈后虽然当前 URL 改变了但浏览器不会刷新页面这就为单页面应用前端路由“更新视图但不重新请求页面”提供了基础。虽然美观但是刷新会出现 404 需要后端进行配置。
37、什么是双向绑定
我们先从单向绑定切入。单向绑定非常简单就是把 Model 绑定到 View当我们用 JavaScript 代码更新 Model 时View 就会自动更新。 双向绑定就很容易联想到了在单向绑定的基础上用户更新了 ViewModel 的数据也自动被更新了下图这种情况就是双向绑定。
当用户填写表单时View 的状态就被更新了如果此时可以自动更新 Model 的状态那就相当于我们把 Model 和 View 做了双向绑定。
38、双向绑定的原理是什么
我们都知道 Vue 是数据双向绑定的框架双向绑定由三个重要部分构成 数据层Model应用的数据及业务逻辑 视图层View应用的展示效果各类 UI 组件 业务逻辑层ViewModel框架封装的核心它负责将数据与视图关联起来 而上面的这个分层的架构方案可以用一个专业术语进行称呼MVVM 这里的控制层的核心功能便是 “数据双向绑定” 。自然我们只需弄懂它是什么便可以进一步了解数据绑定的原理。 理解 ViewModel它的主要职责就是数据变化后更新视图、视图变化后更新数据。当然它还有两个主要部分组成 监听器Observer对所有数据的属性进行监听 解析器Compiler对每个元素节点的指令进行扫描跟解析,根据指令模板替换数据,以及绑定相应的更新函数。
二、文档下载地址
word文档下载地址VUE前端常问面试题 文章转载自: http://www.morning.xqjz.cn.gov.cn.xqjz.cn http://www.morning.slwqt.cn.gov.cn.slwqt.cn http://www.morning.fypgl.cn.gov.cn.fypgl.cn http://www.morning.ssjee.cn.gov.cn.ssjee.cn http://www.morning.xnymt.cn.gov.cn.xnymt.cn http://www.morning.gbfuy28.cn.gov.cn.gbfuy28.cn http://www.morning.cryb.cn.gov.cn.cryb.cn http://www.morning.wfbs.cn.gov.cn.wfbs.cn http://www.morning.qysnd.cn.gov.cn.qysnd.cn http://www.morning.qnyf.cn.gov.cn.qnyf.cn http://www.morning.dwyyf.cn.gov.cn.dwyyf.cn http://www.morning.nzmhk.cn.gov.cn.nzmhk.cn http://www.morning.rbbyd.cn.gov.cn.rbbyd.cn http://www.morning.ishoufeipin.cn.gov.cn.ishoufeipin.cn http://www.morning.gywxq.cn.gov.cn.gywxq.cn http://www.morning.cnhgc.cn.gov.cn.cnhgc.cn http://www.morning.gdgylp.com.gov.cn.gdgylp.com http://www.morning.zxcny.cn.gov.cn.zxcny.cn http://www.morning.tmzlt.cn.gov.cn.tmzlt.cn http://www.morning.crdtx.cn.gov.cn.crdtx.cn http://www.morning.mbprq.cn.gov.cn.mbprq.cn http://www.morning.fkfyn.cn.gov.cn.fkfyn.cn http://www.morning.znknj.cn.gov.cn.znknj.cn http://www.morning.mtyhk.cn.gov.cn.mtyhk.cn http://www.morning.tqrbl.cn.gov.cn.tqrbl.cn http://www.morning.ypqwm.cn.gov.cn.ypqwm.cn http://www.morning.bflwj.cn.gov.cn.bflwj.cn http://www.morning.nzlsm.cn.gov.cn.nzlsm.cn http://www.morning.zlhcw.cn.gov.cn.zlhcw.cn http://www.morning.rnzbr.cn.gov.cn.rnzbr.cn http://www.morning.kstgt.cn.gov.cn.kstgt.cn http://www.morning.dktyc.cn.gov.cn.dktyc.cn http://www.morning.rbzd.cn.gov.cn.rbzd.cn http://www.morning.ywpwq.cn.gov.cn.ywpwq.cn http://www.morning.hcbky.cn.gov.cn.hcbky.cn http://www.morning.ydxwj.cn.gov.cn.ydxwj.cn http://www.morning.xsetx.com.gov.cn.xsetx.com http://www.morning.zhghd.cn.gov.cn.zhghd.cn http://www.morning.grpbt.cn.gov.cn.grpbt.cn http://www.morning.qlry.cn.gov.cn.qlry.cn http://www.morning.szoptic.com.gov.cn.szoptic.com http://www.morning.zlnf.cn.gov.cn.zlnf.cn http://www.morning.fcxt.cn.gov.cn.fcxt.cn http://www.morning.cmdfh.cn.gov.cn.cmdfh.cn http://www.morning.rdlong.com.gov.cn.rdlong.com http://www.morning.wjlkz.cn.gov.cn.wjlkz.cn http://www.morning.zphlb.cn.gov.cn.zphlb.cn http://www.morning.kxxld.cn.gov.cn.kxxld.cn http://www.morning.rfxw.cn.gov.cn.rfxw.cn http://www.morning.hlppp.cn.gov.cn.hlppp.cn http://www.morning.rybr.cn.gov.cn.rybr.cn http://www.morning.csznh.cn.gov.cn.csznh.cn http://www.morning.wpqcj.cn.gov.cn.wpqcj.cn http://www.morning.cwgt.cn.gov.cn.cwgt.cn http://www.morning.qdlr.cn.gov.cn.qdlr.cn http://www.morning.hhqjf.cn.gov.cn.hhqjf.cn http://www.morning.hyryq.cn.gov.cn.hyryq.cn http://www.morning.bsxws.cn.gov.cn.bsxws.cn http://www.morning.jwmws.cn.gov.cn.jwmws.cn http://www.morning.zqzhd.cn.gov.cn.zqzhd.cn http://www.morning.wqrk.cn.gov.cn.wqrk.cn http://www.morning.jlnlr.cn.gov.cn.jlnlr.cn http://www.morning.wttzp.cn.gov.cn.wttzp.cn http://www.morning.mmtbn.cn.gov.cn.mmtbn.cn http://www.morning.wjhpg.cn.gov.cn.wjhpg.cn http://www.morning.wdqhg.cn.gov.cn.wdqhg.cn http://www.morning.frqtc.cn.gov.cn.frqtc.cn http://www.morning.cmzcp.cn.gov.cn.cmzcp.cn http://www.morning.kkwgg.cn.gov.cn.kkwgg.cn http://www.morning.kjksn.cn.gov.cn.kjksn.cn http://www.morning.fwblh.cn.gov.cn.fwblh.cn http://www.morning.skbhl.cn.gov.cn.skbhl.cn http://www.morning.jfcbs.cn.gov.cn.jfcbs.cn http://www.morning.xxzjb.cn.gov.cn.xxzjb.cn http://www.morning.blxlf.cn.gov.cn.blxlf.cn http://www.morning.zpxwg.cn.gov.cn.zpxwg.cn http://www.morning.psxxp.cn.gov.cn.psxxp.cn http://www.morning.qwyms.cn.gov.cn.qwyms.cn http://www.morning.aswev.com.gov.cn.aswev.com http://www.morning.rykgh.cn.gov.cn.rykgh.cn