angularjs $evalAsync()实现原理

《angularjs权威教程》是怎么说的

  • angular扩展了 addEventListener的流程
  • angular事件循环通常称为$digest循环
  • $digest循环分两步:$watch列表,$evalAsync列表

    • 一个用作ui的$scope属性,向$watch列表增加一个函数
    • $watch列表会在$digest循环中被“脏值检查”解析
    • 脏值检查维护一个旧值一个新值一个isDirty就好
    • $scope.$watch( expression , callback )用于给$digest循环手动装配一个脏值检测,如果expression的值检测到变化,则多$digest循环一次
    • $scope.$watch()的返回是它本身的注销函数
    • ng-click后,会绑定onclick时间,调用$scope.$apply(),从而再次进入$digest循环


    • $digest循环运行的第二个操作是执行$$asyncQueue。可以使用$evalAsync()方法访问这个工作队列??这什么意思??

    • 脏值检查完毕后,asyncQueue队列是空的,所以我们在脏值检测阶段通过$evalAsync()把函数加到队列里,然后执行异步列表,然后再来一轮$digest循环
  • $apply()让你从angular框架外部搞一个函数到angular上下文里面去执行,$apply随后还会调用$digest循环。所有ng-[event]指令都会调用$apply()!!!

源代码是怎么写的

看源码痛苦了好几天,找不到切入口。经人建议,从$scope.$apply看起。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值