2016-11-07 17 views
1

私はこの質問をb/cに嫌うのは非常に似ているが、今日は5時間を無駄にして何を解決しようとしているこの問題が発生しています。私のアプリはChromeとFirefoxで完璧に動作しますが、IE 11またはEdgeではSCRIPT1006: Expected ')' MapService.js (43,55)SCRIPT1006: Expected ')' MainController.js (299,44)Error: [ng:areq] Argument 'MainController' is not a function, got undefinedというエラーが表示されます。次のように私のコードは構造化されています。エラー:[ng:areq]引数 'MainController'が関数ではない、IEで定義されていない

index.htmlを

<html lang="en" ng-app="SS" ng-controller="MainController as ctrl" > 

    <script src="src/index.js"></script> 
    <script src="src/SS/DefaultConfigs.js"></script> 
    <script src="src/SS/MapService.js"></script> 
    <script src="src/SS/MainController.js"></script> 
.... 

index.js

angular 
    .module("SS", ["ngMaterial", "angular-intro"]) 
     .config(function($mdThemingProvider, $mdIconProvider) { 
      "use strict"; 
      $mdIconProvider 
       .defaultIconSet("./assets/svg/settings.svg", 128) 
       .icon("clipboard", "./assets/svg/clipboard_48px.svg", 48) 
       .icon("close", "./assets/svg/close_48px.svg", 48); 
       .... 

      $mdThemingProvider.theme("default") 
       .primaryPalette("blue") 
       .dark(); 
    }); 

MainController.js

angular 
    .module('SS') 

    .controller('MainController', function($interval, $location, $mdDialog, $mdSidenav, $mdToast, $scope, DefaultConfigs, MapService) { 
     'use strict'; 
     var animationRunner; 
     .... 

     /* Snippet of code surrounding where 2nd error supposedly is */ 
     var updateMap = function() { 
      MapService.updateCurrentRotation(); 
      MapService.updateCurrentZoom(); 
      MapService.updateCurrentCenter(); 
      $scope.setVisibility(); 
     }; 
     // line below is line 299 
     $scope.setVisibility = function(ind=$scope.currentId, prev=$scope.prevId) { 
      var temp = MapService.layers; 
      if (layerExists(prev)) { 
       temp[prev].setVisible(false); 
      } 
      if (layerExists(ind)) { 
       temp[ind].setVisible(true); 
      } 
     }; 
     /* End snippet of code surrounding where 2nd error supposedly is */ 
    }) 

    .directive('ngRightClick', function($parse) { 
     .... 
    }); 

MapService.js

angular 
    .module('SS') 

    .service('MapService', function($location, DefaultConfigs) { 
     'use strict'; 
     this.map = null; 
     this.layers = []; 

     /* Snippet of code surrounding where 1st error supposedly is */ 
     this.createProjection = function() { 
      this.proj = new ol.proj.Projection({ 
       code: 'EPSG:0000', 
       units: 'pixels', 
       extent: [0, 0, 8192, 8192] 
      }); 
     }; 

     /* next line is line 43 */ 
     this.createLayer = function(ind, isVisible=false, counter=1) { 
      var imageLayer = new ol.layer.Tile({ 
       preload: Infinity, 
       source: new ol.source.XYZ({ 
        url: this.baseURL + ind + '/{z}-{y}-{x}.png', 
        projection: this.proj, 
        wrapX: false, 
        attributions: [this.tileAttribution] 
       }), 
       transitionEffect: 'resize', 
       visible: isVisible 
      }); 
      imageLayer.id = counter; 
      imageLayer.playerId = parseInt(ind, 10); 

      return imageLayer; 
     }; 
     /* End snippet of code surrounding where 1st error supposedly is */ 
    }); 

私のコードでエラーをチェックするためにJSLintをチェックしましたが、IEエラーを修正したものは何も見つかりませんでした。私はグローバルコントローラ宣言を使用していない、私はng-appを2回も呼び出さなかった、私はjavascriptの呼び出しが正しい順序であると信じて、SSモジュールをオーバーライドしていないと思う。私は困惑している。私は非常に多くのソリューションを読んでおり、チェックリストのすべてのオプションをチェックしましたhere

2つのエラーが表示され続け、これがIEでのみ発生しているという事実は、私の問題についてのヒントを提供しますか?

答えて

2

私はあなたの問題は、デフォルトのparamsだと思う:

ind=$scope.currentId, prev=$scope.prevId 
... 
isVisible=false, counter=1 

これはES6 featureであり、このcompatability chartによると、IE11とエッジだけES6を部分的にサポートしています。これはEdge 14までサポートされていません。

Internet Explorerのコードを変更したり、トランスフライヤーを使用したり、ES6 shimを使用したり、(自分がお気に入りの)ドロップを使用することができます。

+0

ありがとう、これで問題は解決しました。どこかに互換性の問題があると思っていましたが、うわー...デフォルトのパラメータはちょうど普通だと感じましたが、これが原因ではないと思いました。残念ながら私はこのプロジェクトをIE9にテストする必要があります... – btathalon

関連する問題