2016-09-14 57 views
-1
<html> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 

    <script type="text/javascript"> 

     var moduleServiceUrl = _spPageContextInfo.webAbsoluteUrl + "/_api/lists/getbytitle('Pages')/Items?$select=ID,Title,FileRef,Modules"; 
     var appVar = angular.module('listApp', []); 

     appVar.controller('controller1', function ($scope, $http) { 
      $http({ 
       method: 'GET', 
       url: moduleServiceUrl, 
       headers: { "Accept": "application/json;odata=verbose" } 
      }).success(function (data, status, headers, config) { 
       $scope.items = data.d.results; 
       $scope.modules = data.d.results.reduce((modules, item) => { 
        if (item.Modules) { 
         if (Array.isArray(modules[item.Modules])) { 
          modules[item.Modules].push(item); 
         } else { 
          modules[item.Modules] = [item]; 
         } 
        } 
        return modules; 
       }, Object.create(null)); 

      }); 
     }) 
    </script> 

</head> 
<body> 
    <hr /> 
    <div ng-app="listApp"> 
     <div id="App1" ng-controller="controller1"> 
      <div ng-repeat="(module, items) in modules"> 
       <p><strong>{{module}}</strong></p> 
       <p ng-repeat="item in items" style="padding-left:10px;"> 
        <a ng-href="{{item.FileRef}}">{{item.Title}}</a> 
       </p> 
      </div> 

     </div> 
    </div> 

</body> 
</html> 

IE is showing this error: [$injector:modulerr]角 - 应用程序在Chrome中工作,但不是IE

IE也说,“$范围是不确定的”,虽然它是函数的参数。

此问题令人困惑,因为代码在Chrome中正常工作。

+0

这就是为什么我认为客户端的JavaScript框架是一个可怕的想法。浏览器地狱。 – duffymo

回答

0

当你做依赖注入时,你应该传递一个字符串数组来描述进入控制器函数的参数。对角

1.Best做法:https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md#data-services

appVar.controller('controller1', controller1); 
controller1.$inject = ['$scope', '$http']; 
function controller1($scope, $http) { 
    // controller code 
} 

2.Default角模式:https://docs.angularjs.org/guide/controller

appVar.controller('controller1', ['$scope', '$http', function ($scope, $http) { 
    // controller code 
}]) 
0

您可以使用angularJS建议报告的内联阵列注释。

appVar.controller('controller1', ['$scope', '$http', function ($scope, $http) { 
     //Codes   
    }]) 
0

最有可能发生因reduce function使用Arrow notation这个错误。 IE不支持箭头符号(ES6功能),更多详细信息请参见Browser Compatibility table

,使其与IE兼容替代箭头函数语法(=>)与回调函数的语法:

$scope.modules = data.d.results.reduce(function(modules, item){ 
    if (item.Modules) { 
      if (Array.isArray(modules[item.Modules])) { 
       modules[item.Modules].push(item); 
      } else { 
       modules[item.Modules] = [item]; 
      } 
    } 
    return modules; 
}, {}); 
相关问题