AngularJS 为何 我在controller里修改了 变量的值,dom 没有改变 谈谈Angular关于$watch,$apply 以及 $digest的工做原理

'use strict'
app.controller('xxxxx', function($scope) {
    $scope.aaaa =null;
    
    $scope.chooseImage = function(){
        wx.chooseImage({
            sourceType: [],
                success:function(res){
                    $scope.aaaa =1
                }
            });
        };
});
<p ng-click="chooseImage()">{{aaaa}}</p>

点击后页面aaaa的值并不会 改变为 1html

由于 wx.chooseImage 这个方法是微信的API, 并不在angular context里面,没有调用apply方法。微信

$apply方法使用情景:AngularJS 外部的控制器(DOM 事件、外部的回调函数如 jQuery UI 空间等)调用了 AngularJS 函数以后,必须调用$apply。在这种状况下,你须要命令 AngularJS 刷新自已(模型、视图等) ,$apply 就是用来作这件事情的。app

以前看见同事写个$timeout(function(){}) 就行了,也是好奇。原来angular在$timeout方法里已经封装了apply方法。函数

 

我主要看了这两篇文章:post

谈谈Angular关于$watch,$apply 以及 $digest的工做原理url

《AngularJS》----$apply 与 $watchspa

相关文章
相关标签/搜索