angluar框架面试题

1.angluar的核心

    1)MVC\2)模块化、3)自动化双向数据绑定 4)语义化标签、依赖注入等。

2.angluar的数据绑定采用什么机制?详书原理

anglaur的双向数据绑定采用脏检查机制。ng只有在指定事件触发后,才进入$digest cycle:

-DOM事件,譬如用户输入文本,点击按钮等。

-XHR响应事件($http)

-浏览器Location变更事件($location)

-Timer事件($timeout,$interval)

-执行$digest()或$apply()

例如,<input> 标签绑定了$scope.name属性,为了更新这个视图,Angular需要追踪变化。它是通过给$watch列表添加一个监控函数做到这一点。而$watch列表会在$digest循环中通过一个叫做"脏值检查"的程序解析。

脏值检查: Angular会持续追踪当前监控的值。Angular会遍历$watch列表,如果从旧值更新后的值没有发生变化,它会继续遍历监控列表。如果值发生了变化,则Angular会启用新值并继续遍历$watch列表。Angular会遍历完整个列表,只要有任何值发生变化,它就会退回到$watch循环中,直到检测到不再发生变化。如果这个循环运行了10次或者更多,则Angular会抛出一个异常,并停止运行。

简单解释:$watch列表里添加了监控函数---->Angular遍历监控列表------>Angular发现了变化----->启用变化后的新值--->受变化值的影响,$watch列表中的其他值,可能跟随着一起发生了变化,也可能没有.因此Angular会进行二次巡查,直到监听的值没有再发生变化

$apply()与$digest()

  $apply()函数可以从Angular框架的外部让表达式在Angular上下文内部执行,并让结果受控(进行digest循环)。例如实现了一个setTimeout()并想让事件运行在Angular上下文内部时,就必须使用$apply()

$scope.apply(function(){
     setTimeout(function(){
         //...
     }, 1000)
})

  或者直接通过调用$digest()函数进行digest循环,以进行脏值检查

//..some action
$scope.$digest();

3.依赖注入(DI)

   让我们可以不用自己实例化就能创建依赖对象的方法,简单来说,依赖是以注入的方式传递的,Angular让我们可以通过DI来创建像Controllers和Directives这样的对象. 我们还可以创建自己的依赖对象, 当我们要实例化它们时, Angular能自动实现注入.

4.表达式 {{}}是如何工作的?

它依赖于$interpolation服务,在初始化页面后,它会找到这些表达式,并且进行标记,于是每遇见一个{{}},则会设置一个$watch.而$interpolation会返回一个带有上下文参数的函数,最后该函数执行,则算是表达式$parse到那个作用域上。

5.AngularJS的数据双向绑定是怎么实现的?

1、每个双向绑定的元素都有一个watcher
2、在某些事件发生的时候,调用digest脏数据检测。这些事件有:表单元素内容变化、Ajax请求响应、点击按钮执行的函数等。
3、脏数据检测会检测rootscope下所有被watcher的元素。$digest函数就是脏数据监测

posted @ 2020-06-15 09:49  蜗牛不是涡流  阅读(158)  评论(0编辑  收藏  举报