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能自动实现注入.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。