2013-11-28 3 views
6

Я использую кассету, которая использует Microsoft Ajax Minifier для минимизации JS. Этот мининатор переименовывает переменные, включая переменные, которые имеют особое значение для Углового, такие как $scope и $http. Итак, Кассетт разбивает мой угловой код!Минимизация нарушает мой код AngularJs

Как я могу предотвратить это?

Для справки: Это угловой код, который разбивается. Параметры функции $scope и $http переименовывается:

// <reference path="vendor/angular.js" /> 

angular.module('account-module', []) 
    .controller('ForgottenPasswordController', function ($scope, $http) { 

     $scope.email = { 
      value: '', 
      isValid: false, 
      containerStyle: "unvalidated", 
      validate: function() { 
       var valid = isEmailAdressValid($scope.email.value); 
       $scope.email.isValid = valid; 
       $scope.email.containerStyle = valid ? "valid" : "invalid"; 
       return valid; 
      }, 
      removeErrorMessage: function() { 
       $scope.email.containerStyle = "unvalidated"; 
      } 
     }; 

     $scope.display = { 
      formClass: '', 
      congratulationsClass: 'hide' 
     }; 

     $scope.submit = function (event) { 
      event.preventDefault(); 

      var emailValid = $scope.email.validate(); 
      if (emailValid) { 
       $http({ 
        method: 'POST', 
        url: '/account/forgot-password', 
        params: { email: $scope.email.value }, 
        headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 
       }).success(function(data) { 
        $scope.success(data); 
       }).error(function() { $scope.error(); }); 
      } 
     }; 

     $scope.success = function (data) { 
      switch (data.Outcome) { 
       case 1: 
        $scope.display.formClass = "hide"; 
        $scope.display.congratulationsClass = ""; 
        break; 
       case 2: 
        $scope.email.containerStyle = "invalid"; 
        break; 
      } 
     }; 

     $scope.error = function() { 
      alert('Sorry, an error occurred.'); 
     }; 

     function isEmailAdressValid(emailAddress) { 
      return /[^\[email protected]][email protected][^\[email protected]]+\.[^\[email protected]]+/.test(emailAddress); 
     } 
    }); 
+2

Можете ли вы показать синтаксис контроллера для нас, тогда мы можем прокомментировать, если вы используете правильный синтаксис или неправильный синтаксис. –

ответ

15

Чтобы предотвратить код minifiers уничтожить ваше угловое приложение, вы должны использовать синтаксис массива для определения контроллеров.

Посмотрите на http://odetocode.com/blogs/scott/archive/2013/03/13/angularjs-controllers-dependencies-and-minification.aspx

(Из О.П.): Для справки, вот измененный код:

angular.module('account-module', []) 
    .controller('ForgottenPasswordController', ["$scope", "$http", function ($scope, $http) { 
... 
}]); 
+14

Я не имею в виду переоценку, но вы спасли мою жизнь и будущее всего человечества. – David

1

Я не уверен, когда Cassette Добавлено, но при создании сверток вам может использовать AddMinified, чтобы указать, что файл такой же миниатюрный, как он может быть, не нарушая его (он не будет уменьшен при его обслуживании).

Это, как говорится, гораздо лучше использовать синтаксис массива углов, потому что более мелкие файлы лучше!

+0

Спасибо за потенциально полезную альтернативу. – David