Я уже знаю о методе инъекции зависимостей, и все мои контроллеры, службы и директивы построены в следующем формате:
App.controller('name', ['myDependency', function (myDependency) { ... }]);
Даже если я выполнил это приложение в режиме разработки (не сведено к минимуму), он отлично работает, никаких проблем, проблем нет. Как только я попытаюсь запустить его в режиме производства (сведено к минимуму), он больше не работает.
Это ошибка в консоли:
Error: [$injector:unpr] Unknown provider: iProvider <- i
Нажав на ссылку, предлагаемую Angular, информация такая же, как я уже знаю, бесполезный.
Мое приложение имеет большое значение с точки зрения контроллеров, служб и т.д., Но оно построено на одном модуле, поэтому я уверен, что он ввел все необходимые файлы.
Я использую множество зависимостей поставщиков, таких как: ngRoute
, ngAnimate
, ngStorage
, ngCookies
и т.д....
Я не понимаю, почему Angular не обеспечивает что-то более надежное и эффективное для отладки вашего приложения, чтобы видеть и исправлять проблемы, очевидно, из минимизированного и сжатого javascript файла невозможно найти ошибку/ошибку... так как я могу ее решить?
Я уже дважды, triple проверил мои собственные файлы, и все они правильно содержат свои зависимости, но Angular говорят, что что-то не так, как я могу понять из этих 10 смешных строк в журнале консоли, где ошибка?
EDIT:
Добавляя ng-strict-di='true'
и запуская его в режиме разработки, он запускает эту ошибку, и, похоже, это не связано с моим кодом... или я ошибаюсь?
Error: [$injector:strictdi] function($scope, $element) is not using explicit annotation and cannot be invoked in strict mode
http://errors.angularjs.org/1.3.15/$injector/strictdi?p0=function(%24scope%2C%20%24element)
at REGEX_STRING_REGEXP (angular.js:63)
at Function.annotate [as $$annotate] (angular.js:3474)
at Object.invoke (angular.js:4181)
at $get.extend.instance (angular.js:8493)
at angular.js:7739
at forEach (angular.js:331)
at nodeLinkFn (angular.js:7738)
at compositeLinkFn (angular.js:7117)
at publicLinkFn (angular.js:6996)
at newCompile (hint.js:2041)(anonymous function) @ angular.js:11655$get @ angular.js:8596(anonymous function) @ angular.js:16302completeOutstandingRequest @ angular.js:4924(anonymous function) @ angular.js:5312
Добавьте атрибут ng-strict-di="true"
к элементу, в котором вы уже применяете директиву ng-app
, и запустите приложение в режиме разработки (то есть с неминифицированным кодом).
Угловой будет выдавать осмысленное исключение, объясняя, где вы забыли использовать нотацию массива для ваших инъекций.
Обратите внимание, что ваш код будет более читабельным, и у вас будет гораздо меньше риска совершить эту ошибку, если вы разрешите ng-annotate преобразовать код для вас.
resolve
и встроенногоcontroller
, проверьте их тоже