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

相關文章
相關標籤/搜索