我正在使用Cassette,它使用Microsoft Ajax Minifier来缩小JS。此缩小器重命名变量,包括对Angular具有特殊含义的变量,例如$scope
和$http
。所以Cassette打破了我的Angular代码!
如何防止这种情况发生?
作为参考,这是正在被破坏的Angular代码。正在重命名$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 /[^\s@]+@[^\s@]+\.[^\s@]+/.test(emailAddress);
}
});
答案 0 :(得分:16)
为了防止代码缩减器破坏您的角度应用程序,您必须使用数组语法来定义控制器。
(来自OP): 作为参考,这是更改的代码:
angular.module('account-module', [])
.controller('ForgottenPasswordController', ["$scope", "$http", function ($scope, $http) {
...
}]);
答案 1 :(得分:1)
我不确定Cassette何时添加了这个,但是当你创建一个包时,你可以使用AddMinified
来指示文件尽可能缩小而不会破坏它(当它不会被缩小时这是服务)。
话虽这么说,使用angular的数组语法要好得多,因为较小的文件更好!