2016-11-10 13 views
0

Ich bin ein minifier Addon zu Visual Studio, die meistens funktioniert mit Ausnahme dieses einen Block von AngularJS CodeAngularJS Richtlinie schlägt fehl, wenn minimierte

Dies ist der unminified Code:

var svgBuildInterface = angular.module("svgBuildInterface", []); 

svgBuildInterface.directive('ngRightClick', function ($parse) { 
    return function (scope, element, attrs) { 
     var fn = $parse(attrs.ngRightClick); 
     element.bind('contextmenu', function (event) { 
      scope.$apply(function() { 
       event.preventDefault(); 
       fn(scope, { $event: event }); 
      }); 
     }); 
    }; 
}); 

Dies ist ziemlich -printed minified Code, der fehlschlägt:

svgBuildInterface = angular.module("svgBuildInterface", []); 
svgBuildInterface.directive("ngRightClick", function(n) { 
    return function(t, i, r) { 
     var u = n(r.ngRightClick); 
     i.bind("contextmenu", function(n) { 
      t.$apply(function() { 
       n.preventDefault(); 
       u(t, { 
        $event: n 
       }) 
      }) 
     }) 
    } 
}); 

ich nicht einen Haltepunkt in den verkleinerten Code setzen können, um herauszufinden, was passiert ist, aber AngularJS löst eine Ausnahme:

Error: [$injector:unpr] http://errors.angularjs.org/1.5.7/ 
$injector/unpr?p0=nProvider%20%3C-%20n%20%3C-%20ngRightClickDirective 
+0

Mögliche Duplikat [Minify AngularJS Skript führt Fehler] (http://stackoverflow.com/questions/35684870/minify-angularjs-script- Fehler-Ergebnisse) – Michelangelo

+1

Mögliches Duplikat von [Angular minification with directive controller?] (http://stackoverflow.com/questions/27727017/angular-minification-with-directive-controller) –

+1

Ihre Anweisung ist nicht minifikationssicher: https : //docs.angularjs.org/guide/di#implicit-annotation –

Antwort

4

Ändern Sie Ihre Direktive wie unten, es gibt bestimmte Best Practices, die befolgt werden müssen, wenn Sie einen Controller oder eine Direktive oder eine Komponente von Angular js schreiben, wenn Sie Ihren JS verkleinern möchten.

Einer von ihnen ist vorbei Dependency Injection über []

var svgBuildInterface = angular.module("svgBuildInterface", []); 

svgBuildInterface.directive('ngRightClick',['$parse', function ($parse) { 
    return function (scope, element, attrs) { 
     var fn = $parse(attrs.ngRightClick); 
     element.bind('contextmenu', function (event) { 
      scope.$apply(function() { 
       event.preventDefault(); 
       fn(scope, { $event: event }); 
      }); 
     }); 
    }; 
}]); 
+1

Ich habe gerade das Gleiche herausgefunden und es hat funktioniert. Ich habe vorher nicht bemerkt, dass $ parse etwas war, das aus eckigen und nicht minimierten Elementen referenziert werden musste. – GeeWhizBang

Verwandte Themen