[英]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錯誤,說它已經在消化了。
有些事情需要注意:
API.Migrations.getThrottles
調用是在MYAPP.modals.Throttling
模塊的回調函數內,該模塊完全在Angular之外? 任何幫助找出造成這個錯誤的原因將不勝感激!
謝謝
作為參考,在這里找到了解決方案: 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.