目录:
1,对MVC,MVP. MVVM 的理解
2.谈谈对$nextTick的理解以及场景使用
3、渐进式框架的理解
4、组件样式属性 scoped 问题及解决方法
一,对MVC、MVP、MVVM的理解
1,MVC
M 表示 Model , 专门用来处理数据模型。
V 表示View, 专注页面布局和数据显示。
C 表示Controller 专注于控制,执行业务逻辑,操作模型和视图。
MVC的数据之间通信都是单向的
View(视图层) 传送指令到 Controller(控制层)
Controller(控制层) 完成业务逻辑后,要求 Model(模型层) 改变状态
Model(模型层) 将新的数据发送到 View(视图层),用户得到反馈
2,MVP
M 表示 Model,专门用来处理数据模型
V 表示View,专门用来处理用户视图
P 表示Presenter,用来处理业务逻辑,在MVC的基础上,修改了通信方向
MVP中,View和Model之间没有任何通信关系,所有的通信和业务逻辑都放在Presenter层中
View(视图层) 发送指令到 Presenter层,
Presenter层 处理业务逻辑,要求 Model(模型层) 改变状态
Model(模型层) 修改状态之后,发送指令到 Presenter层
Presenter层通知View(视图层)做出改变
3,MVVM
M表示 Model,专门用来处理数据模型
V表示View,专门用来处理用户视图
VM表示ViewModel,用来使的View视图层与Model层双向绑定,View的任何变动都会通知ViewModel,而Model的任何变动,也都会通知ViewModel,而不论哪一项发生改变,都会使对应的视图/数据模型同步发生改变
二:谈谈对$nextTick的理解及使用场景
1,对nextTick的理解
Vue的视图更新是通过数据驱动的,当数据发生改变的时候,将当前的数据更改保存在队列中,然后异步的更新视图
由于Vue的视图更新是异步的,所以我们在修改完成数据之后,不一定当前的View已经发生改变,于是就有了nextTick
nextTick是在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
2,nextTick的使用场景
如果要在created()钩子函数中进行的DOM操作,由于created()钩子函数中还未对DOM进行任何渲染,所以无法直接操作,需要通过$nextTick()来完成。在created()钩子函数中进行的DOM操作,不使用$nextTick()会报错
更新数据后,想要使用js对新的视图进行操作时
在使用某些第三方插件时 ,这些插件需要dom动态变化后重新应用该插件,这3时候就需要使用$nextTick()来重新应用插件的方法
三:渐进式框架的理解
***对于渐进式框架来说,主要就代表着它的主张性最小,没有多做职责之外的事。
在你使用一个框架的时候,如果你使用了它的一部分,你就必须使用它的全部,或是很大一部分东西,这个就叫强主张 比如vue主张性很小
四:组件样式属性 scoped 的问题
在Vue组件中,为了使样式私有化(模块化),不对全局造成污染,可以在style标签上添加scoped属性以表示它的只属于当下的模块,局部有效。
遇到的问题:
1,要在父组件中修改子组件的布局样式等
2,要修改v-html渲染出的内容的样式时
3,使用一些UI框架时,修改样式的问题
对于这些问题的解决方案:
1, 同时使用scoped局部样式和全局样式
2,子组件的根节点元素会同时被设置了scoped的父css样式和设置了scoped的子css样式影响,这么设计的目的是父组件可以对子组件根元素进行布局
3, 使用深选择器,>>>或者/deep/进行样式穿透