2016-09-15 112 views
2

我試圖uglify我的AngularJS代碼。我跟所有在互聯網上的教程現在有下面的代碼,但uglifying後,我仍然得到和錯誤:

var app = angular.module('myapp', ['ngMaterial', 'pascalprecht.translate', 'ngSanitize', 'material.components.expansionPanels', 'ngFileSaver', 'ngMessages', 'ngFileUpload', 'ngStorage'] 

TestController.$inject = ['$scope', '$translate', '$timeout','$mdSidenav', '$log', '$sessionStorage']; 

angular.module('myapp').controller('TestController', TestController); 

function TestController ($scope, $translate, $timeout, $mdSidenav, $log, $sessionStorage) {} 

編輯: 我已經找到了問題。問題是我的可配置模塊:

app.config(function ($locationProvider) { 
    $locationProvider.html5Mode(true); 
}); 

不是:

app.config(['$locationProvider', function ($locationProvider) { 
    $locationProvider.html5Mode(true); 
}]); 

app.directive('onReadFile', function ($parse) { 
    return { 
     restrict: 'A', 
     scope: false, 
     link: function(scope, element, attrs) { 
      var fn = $parse(attrs.onReadFile); 

      element.on('change', function(onChangeEvent) { 
       var reader = new FileReader(); 

       reader.onload = function(onLoadEvent) { 
        scope.$apply(function() { 
         fn(scope, {$fileContent:onLoadEvent.target.result}); 
        }); 
       }; 

       reader.readAsText((onChangeEvent.srcElement || onChangeEvent.target).files[0]); 
      }); 
     } 
    }; 
}); 
+0

是您模塊的名稱'myapp'(全部小寫)或'myApp'(駱駝)? – Makoto

+0

語法在這裏不是問題! – thigi

+0

考慮到您在注射器方面存在問題......是的。這裏沒有足夠的信息來說明它是什麼;你能告訴我們你的模塊中依賴哪些服務嗎? – Makoto

回答

0

總是嘗試,並試圖醜化代碼之前,請確保您的應用程序正常運行。

與您在使用控制器時一樣,設置指令時使用相同的方法,您使用$ inject來聲明依賴關係。

見下

app.directive('onReadFile',onReadFile); 

onReadFile.$inject = ['$parse']; 

function onReadFile($parse){ 

    var directive = { 
    restrict:'A', 
    scope: false, 
    link: link 
    } 

    return directive; 

    ////////// 

    function link(scope, element, attrs){ 

     var fn = $parse(attrs.onReadFile); 

     element.on('change', function(onChangeEvent) { 

     var reader = new FileReader(); 

     reader.onload = function(onLoadEvent) { 
      scope.$apply(function() { 
      fn(scope, {$fileContent:onLoadEvent.target.result}); 
      }); 
     }; 

     reader.readAsText((onChangeEvent.srcElement || onChangeEvent.target).files[0]); 
     }); 

    }// end link 

}// onReadFile 
+1

這個函數已經掛起了,直到Angular調用它才做了任何事情,所以我並不是100%相信它是聲明順序... – Makoto

+0

@Makoto但是如果我們想要uglify,順序可能很重要。 – valverde93

+0

@ valverde93:不,訂單並不重要。同樣,函數被聲明爲「函數...」的事實將在其範圍內提升它,所以它將變得易於使用。 – Makoto

-1

this question可能的複製。

嘗試使用這種方式:

angular.module('myapp').controller('TestController', ['$scope', '$translate', '$timeout','$mdSidenav', '$log', '$sessionStorage', function checkInCtrl ($scope, $translate, $timeout, $mdSidenav, $log, $sessionStorage){}]); 
+0

這兩種形式的依賴注入都是有效的和等價的,並且會在uglification中生存下來。 – Makoto

+0

不知何故,我的表單無法存活! @Makoto – thigi

相關問題