当前位置: 首页 > Web前端 > vue.js

Vue面试题Vue实现MVVM数据绑定

时间:2023-03-31 17:40:17 vue.js

MVVM什么是MVVM?MVVM即Model-View-ViewModel,将一个系统分为模型、视图和视图-模型三部分。Vue是典型的MVVM思想,数据驱动视图。通俗一点就是view层不直接和model层通信,他们只能通过view-model层通信。vue中MVVM的理解Vue是一个MVVM渐进式框架,MVVM是vue的实际模式,在vue框架中,数据会自动驱动视图。我们在写vue的时候,就知道它的单文件组件开发方式。模型:数据层,只关注数据本身,不关心任何行为。对应vue组件中的data和props属性。View:视图层,用户操作页面的地方。当view-model更新model时,会通过databinding更新到view中。对应vue组件中的模板和样式部分。ViewModel:业务逻辑层,View需要什么数据,ViewModel提供什么数据,View有什么操作,ViewModel响应这些操作;View和ViewModel交互有两种方式:双向数据传递(数据属性和数据绑定)和单向传递操作(命令属性);由于ViewModel的双向数据绑定,当Model发生变化时,ViewModel会更新,当ViewModel发生变化时,ViewModel也会更新。对应继承Vue类的组件实例Vue,在MVVM思想下,view和model没有直接关联,但是view和view-model,model和view-model会交互。当view视图进行dom操作等数据变化时,可以通过view-model同步到model,同样的model数据变化也会同步到vue。MVVM的数据绑定实现发布订阅模式(backbone.js)脏值模式(angular/react)数据劫持(vue)Vue实现MVVM的双向绑定vue数据劫持结合发布订阅者模式Vue使用数据劫持结合发布者-订阅者模式,通过Object.defineProperty()劫持(监听)每个属性的setter和getter,当数据(对象)发生变化时,向订阅者发布消息,触发相应的监听回调。因此,要实现MVVM的双向绑定,必须实现以下几点:实现一个数据监听器Observer。监听数据对象的所有属性(包括子属性对象的属性),使用Object.defineProperty()为属性添加setter和getter(此时为该属性赋值会触发setter,然后Can监听数据变化),如果有变化,可以获取最新的值并通知订阅者。实现指令解析器编译。扫描分析vue各个元素节点的指令,将指令模板的变量替换为数据,然后初始化渲染页面视图,为每条指令对应的节点绑定一个update函数,并为监听数据添加订阅者,一旦当数据发生变化,收到通知,调用update函数更新数据。实施订阅者观察者。Watcher是Observer和Compile之间的沟通桥梁。它的主要任务是订阅Observer中属性值变化的消息。当属性值发生变化时,会触发指令解析器的Compile中相应的update函数来更新视图。实现MVVM入口函数,将以上三者整合。vue实现MVVM数据绑定之vue面试题