Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ng中的Firebase和AngularFire错误仅在IE8中重复_Javascript_Angularjs_Internet Explorer 8_Firebase_Angularfire - Fatal编程技术网

Javascript ng中的Firebase和AngularFire错误仅在IE8中重复

Javascript ng中的Firebase和AngularFire错误仅在IE8中重复,javascript,angularjs,internet-explorer-8,firebase,angularfire,Javascript,Angularjs,Internet Explorer 8,Firebase,Angularfire,我有一个使用angular和firebase的应用程序。它调用我的firebase url,并对返回的对象中的2项进行简单的ng重复 除了InternetExplorer8外,该应用程序在所有浏览器中都运行良好。我经常在IE8中测试它,它是有效的。并不是说我已经启动了它,在过去几天的某个时候它开始收到这个错误。在这段时间里,我对应用程序进行了更改,但我认为没有任何东西会改变IE8渲染它的方式 IE8中的错误很简单: SCRIPT5007:无法设置未定义或空引用的属性“Artisters” fir

我有一个使用angular和firebase的应用程序。它调用我的firebase url,并对返回的对象中的2项进行简单的ng重复

除了InternetExplorer8外,该应用程序在所有浏览器中都运行良好。我经常在IE8中测试它,它是有效的。并不是说我已经启动了它,在过去几天的某个时候它开始收到这个错误。在这段时间里,我对应用程序进行了更改,但我认为没有任何东西会改变IE8渲染它的方式

IE8中的错误很简单:

SCRIPT5007:无法设置未定义或空引用的属性“Artisters” firebase.js,第1行字符28

我已经将代码简化到了最基本的部分,但仍然会出现错误

您可以在下面看到,Artisters是$scope.xmatch中的对象的名称,我正试图使用ng repeat重复该对象。我必须让它工作,所以任何帮助都将不胜感激

app.js

(function() {
'use strict';
angular.module('ipremiosApp', ['firebase']).config
}).call(this);
global.js

(function() {
  'use strict';
  angular.module('ipremiosApp').controller('GlobalCtrl',['$scope','$timeout',    function($scope, $timeout) {
}]);

angular.module('ipremiosApp').controller('MatchCtrl',['$scope','$timeout','$routeParams','angularFire', function($scope,$timeout,$routeParams,angularFire) {

  var url = 'https://my.firebaseio.com/myfirebase';
  $scope.xmatch = angularFire(new Firebase(url), $scope, 'xmatch');

}]);
}).call(this);
index.html

<!doctype html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
<head>
  <meta charset="utf-8">
  <title>test</title>
</head>
<body data-ng-app="ipremiosApp" data-ng-controller="GlobalCtrl">
  <!--[if lt IE 9]>
    <script src="bower_components/es5-shim/es5-shim.js"></script>
    <script src="bower_components/json3/lib/json3.min.js"></script>
  <![endif]-->

  <div class="main-body match-page" data-ng-controller="MatchCtrl">
    <div id="test" class="artist" data-ng-repeat="artist in xmatch.artists | orderBy: 'votes':true">
    {{artist.name}}
  </div>
</div>

<script src="bower_components/jquery/jquery.js"></script>
<script src="bower_components/angular/angular.min.js"></script>
<script src="https://cdn.firebase.com/v0/firebase.js"></script>
<script src="bower_components/angular-resource/angular-resource.js"></script>
<script src="bower_components/angular-cookies/angular-cookies.js"></script>
<script src="bower_components/angular-sanitize/angular-sanitize.js"></script>
<script src="bower_components/angular-fire/angularfire.js" type="text/javascript"></script>
<script src="scripts/app.js"></script>
<script src="scripts/controllers/global.js"></script>

</body>
</html>

测试
{{artist.name}

看起来angularFire中引入了一个bug,它只影响IE8。我有

问题源于这样一个事实,即在初始化angularFire()之前没有声明
$scope.xmatch
。您可以通过如下方式将其声明为空对象来解决此问题,直到修复程序发布:

new Firebase(url).child('test').set('happy');
$scope.xmatch = {};
angularFire(new Firebase(url), $scope, 'xmatch');
另外,顺便说一句,您的代码中有一个微妙的bug,以后可能会咬到您。您意外地将$scope.xmatch设置为angularFire的返回值(承诺):

// don't do this
$scope.xmatch = angularFire(new Firebase(url), $scope, 'xmatch');

它在这里似乎没有任何负面影响,因为在数据从Firebase到达并覆盖错误声明之前,您没有使用$scope.xmatch进行任何操作,但您肯定不希望将该哈希设置为承诺值:)

谢谢。我要试试这个。谢谢你指出另一个错误。我知道这并不完全正确。