Это связано с вашим уточнением, в частности, с параметрами minify и mangle ваши имена переменных.
Угловое определяет, какое значение вводится в ваши функции от имени параметров. Например ...
angular.factory('MyFactory', function($location) {...});
... заставит угловой искать то, что зависимость называется '$location'
, а затем вызвать вашу функцию с $location
значением, переданным в качестве его параметра.
Когда вы минимизируете свой javascript, с включенной опцией mangle, тогда имена переменных становятся искалеченными. Предыдущая функция превратится в это ...
больше
angular.factory('MyFactory', function(a) {...});
Угловая не имеет правильное имя параметра в исходном коде, а $location
теперь a
. Это экономит размер вашего javascript, но полностью уничтожает неявное разрешение зависимостей Angular. Вы можете решить это одним из двух способов.
Первый - это функция, которая угловата обеспечивает вас.
angular.factory('MyFactory', ['$location', function(a) {...}]);
Вы обеспечиваете имена параметров в массиве с последним элементом массива, являющегося функцией, чтобы ввести параметры в. Таким образом, не имеет значения, что вы называете вашими параметрами в коде, а minifier никогда не изменит строковый литерал, поэтому Angular всегда знает, чего вы хотите.
Другой способ, если вы не хотите потерять удобство, не нужно использовать обозначение массива, чтобы отключить параметр mangle на вашем мини-блоке. Это, очевидно, означает, что вы не минимизируете в той же степени, но спросите себя, действительно ли это стоит лишних байтов.
Полушалый дом должен использовать что-то вроде ngMin, чтобы разрешить аннотацию нотации массива в ваш код, а затем продолжить с помощью мини-кода. Это лучшее из обоих мировых imo, но увеличивает сложность развертывания ваших клиентов js.
EDIT
правильные настройки, чтобы отключить MANGLE поведение в хрюкать бы это ...
uglify: {
options: {
report: 'min',
mangle: false
}
}
Но пакет ngAnnotate может избежать этого. См. here для получения дополнительной информации. (ngAnnotate - пакет, который взял ngMin)
Получаете ли вы эту ошибку все время или только иногда? –
используйте зависимую инъекцию, как описано в ответах ниже, просто замените функцию ($ someVar) на ['$ someVar', function (...)] – Anonymous
tip: используйте unminified angular.js для отладки этого, так как он дает немного больше информации об ошибке, чем angular.min.js. – BatteryAcid