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能自动实现注入.

上一篇:分布式服务Dubbo+Zookeeper安全认证


下一篇:MD5工具类