2013-02-21 49 views
2

我试图有条件地显示/隐藏两个div使用ng显示与$范围内的布尔值,基于AJAX调用完成时。基本上,具有以下布局:角度ng显示不工作在IE7/8

<div id="div1" ng-show="!loadingData"> 
    <!--Some markup here--> 
</div> 
<div id="loadingMessage" ng-show="loadingData"> 
    Loading... 
</div> 

功能挑起的变化包含以下内容:

$scope.loadingData=true; 

var promise = dao.doAjaxGet("url"); 

promise.then(function(data){ 
    //Hide loading message 
    $scope.loadingData=false; 
}); 

AJAX调用运行正常,并能正常工作在Chrome,Safari浏览器,火狐,而不是我们需要支持的两个版本的IE - IE7和IE8。加载消息保持隐藏状态,无论呼叫处于什么状态,div1保持可见。任何人都可以提供此建议吗?

+0

你可以把'{{loadingData}}'看看是否值得到更新? – 2013-02-21 16:01:15

+0

你是对的,价值似乎没有被应用。进一步的调查显示,在Chrome中类似的行为,虽然更零星。为什么会这样? – noiselesslark 2013-02-21 16:15:20

+0

不受$ scope影响。$ apply()也是如此。 – noiselesslark 2013-02-21 16:28:53

回答

1

原来这是与缓存相关的。 Chrome和IE都在第一次通话后缓存ajax通话。我已经设法通过将cache:false引入ajax调用配置来解决问题,但这在IE中似乎没有效果。如果有人有关于此的更多信息,请告诉我。

2

如果您的控制器中有console.log,请将其清除。它帮助我们在IE8中工作,例如ng-hide

0

下面是一个完全有效的Angular ie7模板。 UES一个非常古老的角,但工程

我的HTML文件 https://cdn.jsdelivr.net/bootstrap/3.3.6/css/bootstrap.min.css'>

<!--[if lte IE 8]> 
    <script type="text/javascript"> 
     // IE7 fix for missing 
     if (!window.console) { 
      var console = { 
       log: function() {}, 
       warn: function() {}, 
       error: function() {}, 
       time: function() {}, 
       timeEnd: function() {} 
      } 
     } 
    </script> 

    <script src="https://cdn.jsdelivr.net/json2/0.2/json2.js"></script> 
<![endif]--> 
<!--[if lte IE 9]> 
    <script type="text/javascript" src="https://cdn.jsdelivr.net/es5.shim/4.5.7/es5-shim.js"></script> 
<![endif]--> 
<script type="text/javascript" src="https://cdn.jsdelivr.net/html5shiv/3.7.3/html5shiv.min.js"></script> 
<script type="text/javascript" src="https://cdn.jsdelivr.net/angularjs/1.1.5/angular.js"></script> 

<script> 
    /** 
    * Main AngularJS Web Application 
    */ 
    var app = angular.module('myapp', []); 
    app.controller('MyPageCtrl', pageController); 

    function pageController($scope) { 

     $scope.languages = [ 
      { 'Id': 1, 'Name': 'French' }, 
      { 'Id': 1, 'Name': 'German' }, 
     ]; 
    }; 

</script> 
</head> 
<body ng-controller="MyPageCtrl"> 

<div class="col-xs-12"> 
    <select name="languagesDropDown" id="languagesDropDown" class="form-control" style="width: 200px;"> 
     <option ng-repeat="language in languages" value="{{language.Id}}">{{language.Name}}</option> 
    </select> 
</div>