angular 面试题

用户头像
天津/UI设计师/8年前/320浏览
angular 面试题
用户头像
radarz

angularjs

angularjs 是 mvc 还是 mvvm 框架

MVC的目标是模块化和复用

MVVM的优点:
1-低耦合:View可以独立于Model变化和修改,同一个ViewModel可以被多个View复用;并且可以做到View和Model的变化互不影响
2-可重用性:可以把一些视图的逻辑放在ViewModel,让多个View复用
3-独立开发:开发人员可以专注与业务逻辑和数据的开发(ViewModemvvmdi计人员可以专注于UI(View)的设计
4-可测试性:清晰的View分层,使得针对表现层业务逻辑的测试更容易,更简单

在angular中MVVM模式主要分为四部分:
1-View:它专注于界面的显示和渲染,在angular中则是包含一堆声明式Directive的视图模板。
2-ViewModel:它是View和Model的粘合体,负责View和Model的交互和协作,它负责给View提供显示的数据,以及提供了View中Command事件操作Model的途径;在angular中$scope对象充当了这个ViewModel的角色;
3-Model:它是与应用程序的业务逻辑相关的数据的封装载体,它是业务领域的对象,Model并不关心会被如何显示或操作,所以模型也不会包含任何界面显示相关的逻辑。在web页面中,大部分Model都是来自Ajax的服务端返回数据或者是全局的配置对象;而angular中的service则是封装和处理这些与Model相关的业务逻辑的场所,这类的业务服务是可以被多个Controller或者其他service复用的领域服务。
4-Controller:这并不是MVVM模式的核心元素,但它负责ViewModel对象的初始化,它将组合一个或者多个service来获取业务领域Model放在ViewModel对象上,使得应用界面在启动加载的时候达到一种可用的状态。

mvc的界面和逻辑关联紧密,数据直接从数据库读取。mvvm的界面与viewmode是松耦合,界面数据从viewmodel中获取。所以angularjs更倾向于mvvm。


ng-if 跟 ng-show/hide的区别有哪些

ng-if 在后面表达式为 true 的时候才创建这个 dom 节点,ng-show 是初始时就创建了,用 display:block 和 display:none 来控制显示和不显示。
ng-if 会(隐式地)产生新作用域,ng-switch 、 ng-include 等会动态创建一块界面的也是如此。


ng-repeat迭代数组的时候,如果数组中有相同值,会有什么问题,如何解决?

track by $index


angular 的数据绑定机制

脏检查机制。

双向数据绑定是 AngularJS 的核心机制之一。当 view 中有任何数据变化时,会更新到 model ,当 model 中数据有变化时,view 也会同步更新,显然,这需要一个监控。

原理就是,Angular 在 scope 模型上设置了一个 监听队列,用来监听数据变化并更新 view 。每次绑定一个东西到 view 上时 AngularJS 就会往 $watch 队列里插入一条 $watch,用来检测它监视的 model 里是否有变化的东西。当浏览器接收到可以被 angular context 处理的事件时,$digest 循环就会触发,遍历所有的 $watch,最后更新 dom。

$digest 循环的上限是 10 次(超过 10次后抛出一个异常,防止无限循环)。


controller之间通讯

1、event:这里可以有两种方式,一种是$scope.$emit,然后通过监听$rootScope的事件获取参数;另一种是$rootScope.$broadcast,通过监听$scope的事件获取参数。
这两种方法在最新版本的Angular中已经没有性能区别了,主要就是事件发送的方向不同,可以按实际情况选择。
2、service:可以创建一个专用的事件Service,也可以按照业务逻辑切分,将数据存储在相应的Service中。
3、$rootScope:这个方法可能会比较dirty一点,胜在方便,也就是把数据存在$rootScope中,这样各个子$scope都可以调用,不过需要注意一下生命周期
4、直接使用$scope.$$nextSibling及类似的属性
5、类似的还有$scope.$parent。这个方法的缺点就更多了,官方不推荐使用任何$$开头的属性,既增加了耦合,又需要处理异步的问题,而且scope的顺序也不是固定的,不推荐。
另外就是通过本地存储、全局变量或者现代浏览器的postMessage来传递参数了,除非特殊情况,请避免这类方式。


factory和service,provider是什么关系

factory 把 service 的方法和数据放在一个对象里,并返回这个对象;service 通过构造函数方式创建 service,返回一个实例化对象;provider 创建一个可通过 config 配置的 service。
从底层实现上来看,service 调用了 factory,返回其实例;factory 调用了 provider,将其定义的内容放在 $get 中返回。factory 和 service 功能类似,只不过 factory 是普通 function,可以返回任何东西(return 的都可以被访问,所以那些私有变量怎么写你懂的);service 是构造器,可以不返回(绑定到 this 的都可以被访问);provider 是加强版 factory,返回一个可配置的 factory。


0
举报
|
1
分享
评论
用户头像
评论你的想法~
表情
喜欢TA的作品吗?喜欢就快来夸夸TA吧!
推荐素材
3D风格时尚电子商务设计元素
男生坐在网页面前办公矢量插画
卡通女孩与网页表格3D渲染
四个人物分别在上网贴纸合集
一个男生和两个女生站在网页前面打招呼矢量
卡通风格网页页面3D渲染
新年快乐送福网页矢量图banner
浏览电脑网页的元素
网页页面矢量插画
网页图标
三个青年站在网页周边矢量插画
网页设计——纸杯蛋糕
互联网,互联网插画,商务,数据,项目,合作,网页插画,插画,大数据,智能,商业,网页,网页设计,插画设计,互联,未来,沟通,渐变,蓝色插画,商铺,覆盖,管理,项目管理,效率,提升,高效,关系,拓展,
三个青年正在装修网页矢量插画
商务网页
 网页背景
卡通风格网页页面3D渲染
女生坐在网页面前办公矢量插画
卡通风格网页页面3D渲染
户外旅行飞机情侣假日出行
男生和女生站在网页面前矢量扁平插画
三位美女围着网页看信息矢量插画
卡通风格网页页面3D渲染
互联网,互联网插画,商务,数据,项目,合作,精准,投放,网页插画,插画,大数据,智能,商业,网页,网页设计,插画设计,互联,未来,交流,沟通,渐变
网页电商背景矢量插画
你可能喜欢
大家都在看
登录注册