簡體   English   中英

使用IE 11和AngularJS的2路數據綁定問題

[英]2 way data binding issue using IE 11 with AngularJS

我最近在我們的Web應用程序上構建了一個使用AngularJS的功能,我在IE 11中遇到了一些問題,沒有正確地將$apply()數據更改到DOM。 出於某種原因,這種情況有時只會發生,並且在我嘗試調試問題時永遠不會發生,這使得它看起來像是時間問題。

這是在問題發生時調用的函數。

$scope.createThrottling = function (sources) {
            MYAPP.modals.Throttling('New', sources, API, function () {
                $scope.isLoading = true;

                $scope.$apply();


                API.Migrations.getThrottles({ id: jQuery.getUrlVar('id') }, function (data) {
                    $scope.Throttles = data.Throttles;
                    $scope.isLoading = false;

                    // THE PROBLEM IS RIGHT HERE

                });


            });
        }

上面的評論顯示問題似乎源於何處。 在執行代碼時,Angular應該自動檢查$scope.Throttling的更改,然后相應地更改DOM,但是,出於某種原因,在IE 11中,在第一次訪問頁面時綁定沒有發生。

頁面的后續刷新導致綁定工作,但這似乎很奇怪。 API.Migrations.getThrottles完成之后就好像$scope.$apply() ,但我不能這樣做,因為Angular會拋出一個JS錯誤,說它已經在消化了。

有些事情需要注意:

  1. 這只發生在IE中
  2. 這只發生在第一次訪問每個瀏覽器的頁面時(我可以點擊F5並嘗試相同的東西,它會工作)
  3. 這是否會發生,因為我的API.Migrations.getThrottles調用是在MYAPP.modals.Throttling模塊的回調函數內,該模塊完全在Angular之外?
  4. 當我嘗試調試上面的JS函數時,一切正常,這使它看起來像一個計時問題

任何幫助找出造成這個錯誤的原因將不勝感激!

謝謝

作為參考,在這里找到了解決方案: http//www.oodlestechnologies.com/blogs/AngularJS-caching-issue-for-Internet-Explorer

$httpProvider.defaults.cache = false;
if (!$httpProvider.defaults.headers.get) {
    $httpProvider.defaults.headers.get = {};
}
$httpProvider.defaults.headers.get['If-Modified-Since'] = 'Thu, 01 Jan 1970 00:00:00 GMT';

我想我已經找到了問題! 我終於嘗試在不使用調試器的情況下打印從DOM中的服務器返回的數據,我意識到API響應並沒有給我回復新數據! 它正在發送不再有效的緩存數據,這就是對象未顯示在DOM中的原因。 這也解釋了為什么使用調試器是有效的,因為它強制每個API調用都不被緩存!

我能夠在我來解決這個問題$resource加入{ _: Date.now() }在我的params在我的對象$resource 這會將_=1234567890附加到此$resource所有GET調用,這會強制IE不緩存

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM