$apply用法注意


  Angular為我們提供了一些接口綁定JavaScript代碼和數據,而綁定數據改變和更新angular則是使用$apply方法實現的。

$apply

  進行數據變化檢查的實際上是$digest函數,但是我們往往不是直接使用$digest,而是使用$apply$apply接收表達式或者函數作為參數后調用$digest來更新綁定部門以及監控器。實際上,Angular幾乎在所有提供的代碼中添加了$apply,如ng-click,初始controller,$http的回調操作,在這,你並不需要親自調用 $apply,而且重復的調用會引起錯誤。

  因此,當你運行了一個新階段,並且這部分並不屬於Angular庫的情況下才需要使用$apply。這有一段關於setTimeout的代碼,在經過了2000毫秒的延遲之后,代碼進入執行了一個新的階段,但是Angular並不知道數據有更新,因此更新並不會被顯示。

function Ctrl($scope) {  
    $scope.message = "Waiting 2000ms for update";

    setTimeout(function () {
        $scope.message = "Timeout called!";
        // AngularJS unaware of update to $scope
    }, 2000);  
}

在上面的代碼中就需要調用$apply方法,手動調用,另外Angular提供了$timeout來代替setTimeout,相當於在其中默認調用$apply。一般直接使用Angular里面的方法則不用調用$apply方法。

  另外,除$http之外的Ajax調用,除了ng-*之外的監聽器,或者除了$timeout之外的計時器,都應該使用$scope.$apply來同步顯示綁定。如下例子,則是Ajax的例子。

$.ajax({
            type: 'GET',
            url: '/rest/caseinfo/getcaseinfobybh/' + bh,
            contentType: "application/json",
            success: function (data, textStatus) {
                $scope.caseinfo = data;
                $scope.$apply();
            },
            error: function (xmlHttpRequest, textStatus, errorThrown) {
                alert("獲取異常 " + errorThrown);
            }
        });

  這里使用JQuery里面的方法,調用$scope域內的參數,則需要手動調用$apply方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM