前端面试题(七)

目录:

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/进行样式穿透

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容