2016-09-14 5 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 также говорит, что «$ сфера не определена», хотя он является параметром функции.

Этот вопрос вызывает недоумение, поскольку код работает отлично в хромированном состоянии.

+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

Скорее всего эта ошибка возникает из-за Arrow notation, используемые в reduce function. Значок стрелки (функция ES6) не поддерживается IE, для получения более подробной информации следуйте 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; 
}, {}); 
Смежные вопросы